【问题标题】:How does Eureka lease renewal work?Eureka 租约续订如何运作?
【发布时间】:2018-03-02 19:27:13
【问题描述】:

我有一个 Eureka 服务器和一个 Eureka 客户端。在客户端的 bootstrap.properties 中,我有以下配置:

eureka.instance.leaseRenewalIntervalInSeconds=240
eureka.instance.leaseExpirationDurationInSeconds=240

我的理解是客户端每隔240秒就会向服务器发送一次心跳。如果在 240 秒内没有收到心跳,它将再等待 240 秒。如果仍未收到心跳,则注销客户端。

但是,我观察到的是,当我手动停止客户端时,Eureka 仪表板会立即将客户端显示为已关闭,而无需等待 240 秒。我希望在仪表板识别客户端已关闭之前至少延迟 240 秒。有人可以解释为什么会发生这种情况,我怎样才能得到我提到的行为?

【问题讨论】:

  • 如果你想让它再等 240 秒,然后进行以下更改 eureka.instance.leaseExpirationDurationInSeconds= 480

标签: java spring netflix-eureka spring-cloud-netflix


【解决方案1】:

发现客户端(Eureka 客户端)注销自己在关闭期间从 Eureka 服务器。这就是为什么您的实例在关闭时会立即从 Eureka 服务器的仪表板中消失。

不幸的是,据我所知,没有属性可以禁用此行为。

但您应该记住,Eureka 服务器的仪表板会显示已注册实例的当前状态。但是 Eureka 服务器的 API 有自己的响应缓存。这意味着即使您的仪表板没有显示您已关闭的实例,API 的响应也可能包含您在缓存期间关闭的实例信息。

您可以使用以下属性调整此服务器缓存期限。默认值为 30 秒。

eureka.server.responseCacheUpdateInvervalMs

PS1) 更改 eureka.instance.leaseRenewalIntervalInSeconds 值有一些副作用。一些尤里卡服务器代码假定它是 30 秒。如果更改此属性,自我保护模式可能无法正常工作。

PS2) Eureka 客户端也有它自己的缓存。因此,Eureka 客户端也需要一些时间来识别您的实例的消失。

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2023-03-18
    • 2016-12-26
    • 2019-02-17
    • 2016-02-28
    • 2021-12-07
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多