摘要: 原创出处
http://www.iocoder.cn/Eureka/instance-registry-cancel/ 「芋道源码」欢迎转载,保留摘要,谢谢!
本文主要基于 Eureka 1.8.X 版本
本文主要分享 Eureka-Client 向 Eureka-Server 下线应用实例的过程。
FROM 《深度剖析服务发现组件Netflix Eureka》 二次编辑
推荐 Spring Cloud 书籍:
应用实例关闭时,Eureka-Client 向 Eureka-Server 发起下线应用实例。需要满足如下条件才可发起:
eureka.registration.enabled = true
,应用实例开启注册开关。默认为 false
。eureka.shouldUnregisterOnShutdown = true
,应用实例开启关闭时下线开关。默认为 true
。实现代码如下:
|
ApplicationInfoManager#setInstanceStatus(...)
方法,设置应用实例为关闭( DOWN )。调用 #unregister()
方法,实现代码如下:
|
AbstractJerseyEurekaHttpClient#cancel(...)
方法,DELETE
请求 Eureka-Server 的 apps/${APP_NAME}/${INSTANCE_INFO_ID}
接口,实现应用实例信息的下线。com.netflix.eureka.resources.InstanceResource
,处理单个应用实例信息的请求操作的 Resource ( Controller )。
下线应用实例信息的请求,映射 InstanceResource#cancelLease()
方法,实现代码如下:
|
调用 PeerAwareInstanceRegistryImpl#cancel(...)
方法,下线应用实例。实现代码如下:
|
AbstractInstanceRegistry#cancel(...)
方法,下线应用实例信息。numberOfRenewsPerMinThreshold
、expectedNumberOfRenewsPerMin
,自我保护机制相关,在 《Eureka 源码解析 —— 应用实例注册发现(四)之自我保护机制》 有详细解析。调用 AbstractInstanceRegistry#cancel(...)
方法,下线应用实例信息,实现代码如下:
|
registry
)。第 18 至 21 行 :添加到最近下线的调试队列( recentCanceledQueue
),用于 Eureka-Server 运维界面的显示,无实际业务逻辑使用。实现代码如下:
|
第 22 至 26 行 :移除应用实例覆盖状态映射。在《应用实例注册发现 (八)之覆盖状态》详细解析。
false
)。第 34 行 :调用 Lease#cancel()
方法,取消租约。实现代码如下:
|
第 35 至 45 行 :设置应用实例信息的操作类型为添加,并添加到最近租约变更记录队列( recentlyChangedQueue
)。recentlyChangedQueue
用于注册信息的增量获取,在《应用实例注册发现 (七)之增量获取》详细解析。实现代码如下:
|
第 47 行 :设置响应缓存( ResponseCache )过期,在《Eureka 源码解析 —— 应用实例注册发现 (六)之全量获取》详细解析。
false
)。