Eureka服务实例下线机制

Eureka服务实例下线分为正常下线和故障摘除。正常下线时,服务实例调用shutdown()方法,取消心跳租约并从注册表删除。故障摘除则依赖定时任务检测心跳,若服务实例长时间无心跳,则视为故障并逐步从注册表中移除。整个过程涉及多级缓存和补偿时间策略,确保服务实例状态的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Eureka服务实例的下线包含两种情况,第一种就是正常的服务实例下线,第二种是服务实例故障,然后自动摘除故障的服务实例

先来说说第一种情况,当一个eureka client正常的服务下线时,会自己调用一个shutdown()方法来执行下线的逻辑,里面包含了一些资源的释放,组件的关闭,主要是又会去调用一个cancelLease的接口,这里的Lease其实维护的是心跳的信息,eureka client和eureka server之间需要维护心跳,才能知道对方是不是还活着,还在正常工作

在cancelLease这个接口中,会将要下线的服务实例从注册表中删除,同时会在Lease,也就是心跳信息中维护一个evictionTimestamp变量作为实例的下线时间,通过evictionTimestamp就能判断一个实例是否已经下线了

最后还会利用到多级缓存的机制,简单来说就是将下线的服务实例丢到了一个最近变更队列recentChangedQueue中,然后由一个定时任务,每隔30秒将readWriteCacheMap(读写缓存)和readOnlyCacheMap(只读缓存)进行一个同步,下次所有的eureka client来拉取增量注册表的时候,就会发现readOnlyCacheMap里没有,会找readWriteCacheMap也会发现没有,然后就会从注册表里抓取增量注册表,recentChangedQueue中所包含的已经下线的实例就会从服务注册表中删除掉

如果上面的多级缓存相关的东西看不懂的话,有兴趣的同学可以参考一下Eureka的注册表拉取及多级缓存机制简析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值