eureka服务搭建
euerka简单介绍
1.什么是服务治理
Springcloud封装了Netflix公司开发的Eureka来实现服务治理。
服务治理管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务注册于发现。
2.什么是服务注册与发现
Eureka采用CS架构。EurekaServer作为服务注册的服务器,它是注册中心。而系统中的其他服务,使用eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员可以通过eurekaserver来监控系统各个服务的运行情况。
在服务注册发现中,有一个注册中心。当服务器启动时会把当前服务器自己的信息,比如服务地址、通讯地址等以别名方式注册到注册中心。另一方(消费者),以别名的方式到注册中心获取到实际的地址,然后再实现本地的服务调用。
3.Eureka的两个组件
EurekaServer提供注册服务,各个微服务节点通过配置启动后,会在eureka服务中进行注册。这样EurekaServer服务注册表中将会存储所有可调用服务节点的信息,服务节点的信息可以在界面中直观的看到。
EurekaClient通过注册中心获取服务。是一个Java客户端,用于简化EurekaServer的交互;具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认30s)。如果EurekaServer在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从注册表中把这个服务节点移除(默认90s)。
代码搭建
项目架构如图
maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kimwu_kill_mall</artifactId>
<groupId>com.kimwu</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kimwu_kill_eureka</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
配置文件
server:
port: 17001
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false #不注册自己
fetch-registry: false #表示自己就是注册中心,不需要去检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# defaultZone: http://eureka7002.com:7002/eureka/
server:
#关闭自我保护机制,保证不可用服务被及时剔除
enable-self-preservation: false
eviction-interval-timer-in-ms: 2000
spring:
application:
name: kimwu-kill-eureka
启动类
/**
* @author KimWu
* @date 2020/6/2 22:47
* @Description :
*/
@SpringBootApplication
@EnableEurekaServer //服务注册中心
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
zuul服务搭建
zuul简单介绍
1. Zuul 简介
Zuul 微服务网关是为Spring Cloud Netflix提供动态路由,监控,弹性,安全等服务的框架。可以和Eureka、Ribbon、Hystrix等组件配合使用。
2. Zuul 主要功能
1、 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
2、审查与监控:在边缘位置追踪有意义的数据和统计结果,从而为我们带来精确的生产视图。
3、动态路由:动态地将请求路由到不同的后端集群;
4、压力测试:逐渐增加指向集群的流量,以了解性能;
5、为每一种负载类型分配对应容量,并弃用超出限定值的请求;
zuul服务搭建
项目架构如图
maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kimwu_kill_mall</artifactId>
<groupId>com.kimwu</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kimwu_kill_zuul</artifactId>
<dependencies>
<!-- consul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- zuul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
<!-- starter fail denpend -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
</project>
配置文件
server:
port: 17002
spring:
application:
name: kimwu-kill-zuul
redis:
cluster:
nodes: 集群模式
host: 192.186.110.165
port: 7000
timeout: 2000
password: 密码
eureka:
client:
register-with-eureka: true #表示注册到eureka
fetch-registry: true #是否从eurekaServer抓取已有的注册信息,集群必须设置为true才能配合ribbon使用负载均衡
service-url:
defaultZone: http://localhost:17001/eureka
# defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
instance:
instance-id: ${spring.application.name}
prefer-ip-address: true #访问路径可以显示ip
server: #关闭自我保护机制,保证不可用服务被及时剔除
enable-self-preservation: false
eviction-interval-timer-in-ms: 2000
zuul:
host:
connect-timeout-millis: 15000 #HTTP连接超时要比Hystrix的大
socket-timeout-millis: 60000 #socket超时
routes:
kimwu-kill-order:
path: /kimwu-kill-order/**
service-id: kimwu-kill-order
strip-prefix: true
custom-sensitive-headers: true
semaphore:
max-semaphores: 5000
#负载配置
ribbon:
ConnectTimeout: 10000
ReadTimeout: 60000
MaxConnectionsPerHost: 3000
MaxTotalConnections: 3000
#熔断配置
hystrix:
command:
default:
#断路器超时设置和请求的超时
execution:
isolation:
thread:
timeoutInMilliseconds: 60000
#设置熔断器失败的个数
circuitBreaker:
requestVolumeThreshold: 1000
#设置核心线程数
threadpool:
default:
coreSize: 100
maxQueueSize: 2000
queueSizeRejectionThreshold: 2000
启动类
/**
* @author KimWu
* @date 2020/5/23 20:25
* @Description :
*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableZuulProxy
@EnableDiscoveryClient
@EnableEurekaClient
//@EnableResourceServer
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class,args);
}
}
公共组件
redis公共组件
架构如图
具体可参考git仓库
https://gitee.com/kim_wu94/kim-redis.git
该仓库功能:
集成redis操作 ①实现注解实现redis分布式锁,包括续命续时操作(业务时间过长key过期自动续命) ②实现redis键过期通知,发布订阅,键值过期处理 ③使用注解实现接口限流,redis实现方式 ④mybatis-plus使用redis作为二级缓存,添加注解即可