我有一台Eureka服务器和一台Eureka客户端。在客户端的bootstrap.properties中,我有以下配置:
eureka.instance.leaseRenewalIntervalInSeconds=240
eureka.instance.leaseExpirationDurationInSeconds=240
我的理解是客户端每240秒向服务器发送一次心跳。如果在240秒内没有获得心跳,它将等待另外240秒。如果仍未收到心跳,则会取消注册客户端。
然而,我观察到的是,当我手动停止客户端时,Eureka仪表板会立即将客户端显示为关闭而无需等待240秒。我希望在仪表板识别出客户端关闭之前至少延迟240秒。有人可以解释为什么会发生这种情况,我怎样才能得到我提到的行为?
答案 0 :(得分:1)
发现客户端(Eureka客户端)自行注销在关机期间形成Eureka服务器。这就是为什么你的实例在关闭时立即从Eureka服务器的仪表板中消失的原因。
不幸的是,就我所知,没有任何属性可以禁用此行为。
但您应该记住,Eureka服务器的仪表板显示已注册实例的当前状态。但Eureka服务器的API有自己的响应缓存。这意味着即使您的仪表板未显示已关闭的实例,API的响应也可能包括您在缓存期间关闭的实例信息。
您可以使用以下属性调整此服务器缓存周期。默认值为30秒。
eureka.server.responseCacheUpdateInvervalMs
PS1)更改eureka.instance.leaseRenewalIntervalInSeconds
值会产生一些副作用。一些尤里卡服务器代码假设它是30秒。如果更改此属性,自我保留模式可能无法正常工作。
PS2)Eureka客户端也拥有自己的缓存。因此,Eureka客户端也需要一些时间来识别您的实例的消失。