eureka-servie-高可用
- 1 eureka-servie-高可用- 2 eureka-client注册- 3 核心知识点- - 【3.1】服务注册- 【3.2】服务续约- 【3.3】服务剔除- 【3.4】保护机制
1 eureka-servie-高可用
案例:eureka-service-cluster**
pom依赖:
<!--eureka服务端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
本地hostnam
打开C:\Windows\System32\drivers\etc,编辑hosts
127.0.0.1 eureka1
127.0.0.1 eureka2
application.yml文件:
spring:profiles:active:8082#启动不同项目的时候手动切换
application-8081.yml
这里把eureka1注册eureka2
server:port:8081eureka:instance:hostname: eureka1
#默认:90s#标识eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,#太大:可能将流量转发过去的时候,该instance已经不存活了#太小:instance则很可能因为临时的网络抖动而被摘除掉lease-expiration-duration-in-seconds:45#默认:30s#表示eureka client发送心跳给server端的频率lease-renewal-interval-in-seconds:15client:#要不要去注册中心获取其他服务的地址fetch-registry:false#自己就是注册中心,不用注册自己register-with-eureka:false#服务地址service-url:# 多个地址使用","分割,defaultZone: http://eureka2:8082/eureka/
server:# 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85renewal-percent-threshold:0.8#enable-self-preservation: false#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)eviction-interval-timer-in-ms:30000
application-8082.yml
这里把eureka2注册eureka1
server:port:8082eureka:instance:hostname: eureka2
#默认:90s#标识eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,#太大:可能将流量转发过去的时候,该instance已经不存活了#太小:instance则很可能因为临时的网络抖动而被摘除掉lease-expiration-duration-in-seconds:45#默认:30s#表示eureka client发送心跳给server端的频率lease-renewal-interval-in-seconds:15client:#要不要去注册中心获取其他服务的地址fetch-registry:false#自己就是注册中心,不用注册自己register-with-eureka:false#服务地址service-url:# 多个地址使用","分割defaultZone: http://eureka1:8081/eureka/
server:# 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85renewal-percent-threshold:0.8#enable-self-preservation: false#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)eviction-interval-timer-in-ms:30000
启动配置:
packagecom.it.springcloud;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/**
* @ClassName EurekaServerStart.java
* @Description eureka服务端启动类
*/@SpringBootApplication//启动服务端@EnableEurekaServerpublicclassEurekaClusterServerStart{publicstaticvoidmain(String[] args){SpringApplication.run(EurekaClusterServerStart.class);}}
访问http://127.0.0.1:8081/,发下DS中有个eureka2
2 eureka-client注册
以module-user-service模块为例,把它注册到高可用eureka集群中,让他提供user的服务
pom依赖
module-user-service的pom中添加
<!--eureka-client支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
application.yml
module-user-service的application.yml中添加:
#注册中心eureka:client:service-url:#这里会把模块注入到eureka1,eureka2defaultZone: http://eureka2:8082/eureka/,http://eureka1:8081/eureka/
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,#对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒registry-fetch-interval-seconds:15
启动配置
packagecom.it.springcloud;importlombok.extern.slf4j.Slf4j;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@Slf4j//开启eureka的服务端@EnableEurekaClientpublicclassUserServiceStart{publicstaticvoidmain(String[] args){SpringApplication.run(UserServiceStart.class, args);}}
3 核心知识点
【3.1】服务注册
服务提供者、服务消费者、启动后都会向注册中心注册服务(如果配置了注册)。下图是介绍如何完成服务注册的:
注册中心【eureka-service】服务接收到 register 请求后:
保存服务信息,将服务信息保存到 registry 中;
更新队列,将此事件添加到更新队列中,供 Eureka Client 增量同步服务信息使用。
清空二级缓存,即 readWriteCacheMap,用于保证数据的一致性,将此事件同步至其他的 Eureka Server 节点。
相关配置
#注册中心eureka:client:service-url:defaultZone: http://eureka2:8082/eureka/,http://eureka1:8081/eureka/
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,#对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒registry-fetch-interval-seconds:15
【3.2】服务续约
服务注册后,要定时(默认 30S,可自己配置)向注册中心发送续约请求,告诉注册中心“我还活着”。
注册中心收到续约请求后:
更新服务对象的最近续约时间,即 Lease 对象的 lastUpdateTimestamp【0->45】
同步服务信息,将此事件同步至其他的 Eureka Server 节点。
剔除服务之前会先判断服务是否已经过期,判断服务是否过期的条件之一是续约时间和当前时间的差值是不是大于阈值。
相关配置
eureka:instance:hostname: eureka1
#默认:90s#标识eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,#太大:可能将流量转发过去的时候,该instance已经不存活了#太小:instance则很可能因为临时的网络抖动而被摘除掉lease-expiration-duration-in-seconds:45#默认:30s#表示eureka client发送心跳给server端的频率lease-renewal-interval-in-seconds:15
【3.3】服务剔除
Eureka Server 提供了服务剔除的机制,用于剔除没有正常下线的服务。
服务正常停止之前会向注册中心发送注销请求,告诉注册中心“我要下线了”。
注册中心服务接收到 cancel 请求后:
删除服务信息,将服务信息从 registry 注册表中删除;
更新队列,将此事件添加到更新队列中,供 Eureka Client 增量同步服务信息使用。
清空二级缓存,即 readWriteCacheMap,用于保证数据的一致性。
更新阈值,供剔除服务使用。
同步服务信息,将此事件同步至其他的 Eureka Server 节点。
服务正常停止才会发送 Cancel,如果是非正常停止,则不会发送,此服务由 Eureka Server 主动剔除。
eureka:server:# 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85renewal-percent-threshold:0.8#enable-self-preservation: false#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)eviction-interval-timer-in-ms:30000
【3.4】保护机制
版权归原作者 THE ORDER 所有, 如有侵权,请联系我们删除。