05Eureka学习

Eureka的一些概念

Register-服务注册

当Eureka Client向Eureka Server注册的时候,client会向server提供自身的元数据信息,如:IP地址、端口、运行状况

Renew-服务续约

client每个30秒向server发送信息告知server服务正常,如果在90秒内,server没有收到client的消息,server默认client已下线,将client实例从服务列表中删除

Fetch Registries-获取服务注册列表信息

client向server注册成功后,会从server上获取服务的注册列表,当client需要访问其他服务的时候,就是从服务的注册列表中获取其他服务的信息;client默认每30秒从server更新注册列表的信息

Cancel-服务下线

client主动发送下线请求,server将client实例从服务注册列表中删除

Eviction-服务剔除

当server在90秒内没有收到client的消息通知,server就会将client从注册列表中剔除

 

源码了解

client服务启动时,创建DiscoveryClient对象(图1),DiscoveryClient对象维护着scheduler、heartbeatExecutor、cacheRefreshExecutor等线程池,通过调用initScheduledTasks()启动线程,进行服务注册、服务续约的一系列功能。

线程池信息

 

initScheduledTasks()

initScheduledTasks方法最后设置线程启动

 

 

 

 

 

 

 

 

线程的run方法默认调用discovery的方法,进行服务注册和服务列表更新

 

 

服务注册的信息

流程如下:

1.discoveryClient实例创建,构建线程池,指定线程任务;

2. InstanceInfoReplicator这个对象实现线程接口,作为线程任务调用调用模板,调用discoveryClient的register等方法进行服务注册。

 

discoveryClient下的其他方法分别实现不同的功能

fetchRegistry()获取服务注册列表

renew()续约

 

server方记录服务注册信息于AbstractInstanceRegistry的registry中

 

client通过调用server的接口ApplicationResource,将服务信息注册到server上

 

server通过PeerAwareInstanceRegistryImpl的register()实现集群信息的同步

 

注意事项

  1. Eureka Client启动后并非马上向server注册,存在默认40秒的延迟,在initScheduledTasks方法最后
  2. Eureka Server存在响应缓存,注册的实例不能马上就出现在服务注册列表中
  3. Eureka Client保留注册表信息的缓存,缓存每30秒更新一次,因此Eureka刷新本地缓存并发现其他新注册的实例可能需要30秒
  4. Ribbon的负责均衡器从本地的EurekaClient获取服务注册列表信息,而Ribbon本身也维护了缓存,此缓存每30秒刷新一次。

 

Eureka自我保护模式

当一个新的Eureka Server加入到集群的时候,会自动从相邻的Peer节点获取服务实例的信息,如果从当前的Peer节点获取信息失败,就会从下一个节点获取,直到获取成功,此时Server会设置服务续约的阈值,如果Server接收到的服务续约信息低于阈值,就会启动自我保护模式,不再剔除注册列表的信息。以防止因为Server自身的网络问题导致Client不能被其他服务消费

 

关闭Eureka自我保护模式:

eureka:

  server:

enable-self-preservation: false

 

 

Eureka集群构建

       略

       server只会向server-url配置指定server同步信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值