eureka原理

eureka原理

eureka分为服务端和客户端

客户端主要逻辑是在discoverclient这个类里面

在initScheduledTasks()这个方法里面主要会做三件事

1.定时更新服务注册表

2.定时服务续约

3.定时注册服务

在定时更新服务表时首次进行全量更新,否则进行增量更新

增量更新会返回增量实例的集合和所有实例的hashcode

把增量的实例合并到本地缓存后会计算此时所有实例的hashcode和服务端返回的全量的hashcode是否一致,不一致的话会调用全量更新。

eureka的定时操作并不是定死的每多少秒执行一次,他是调用的schedule(),scheduler里面传的task的run方法里面在catch里面捕获超时异常,如果超时的话,把传的时间*2,最后在finally里面再调用一次schedule,里面传的时间就是delay.get,如果发生超时就是传入的时间X2后会再执行一次,下次过来又回复因为在try里面是delay.set(传入的时间)

注册实例存放的map 是一个两层的concurrenthashmap,外层map的key为服务名称,内层map的key是instanceid

server端获取注册信息的接口是调用ApplicationsResource的getContainers那个方法

首先从只读缓存中获取,只读缓存中如果没有就从读写缓存中读写,读写缓存中没有就直接从内存注册表里获取,读写缓存默认180秒定时过期,schedule默认每30秒将读写缓存里的数据更新到只读缓存中去

register的时候会清空读写缓存,并往注册表里面写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值