续订阈值和续订(最后一分钟)

Posted

技术标签:

【中文标题】续订阈值和续订(最后一分钟)【英文标题】:Renews threshold and Renews (last min) 【发布时间】:2016-05-12 17:52:13 【问题描述】:

我正在测试一个 spring-cloud eureka 服务器和客户端。 我有一个关于默认配置(服务器和客户端)的简单问题。

在服务器端,更新阈值等于 3。 在客户端,它每 30 秒发送一次心跳(每分钟最多 2 次)。

当我查看注册表仪表板时,当waitTimeInMswhenSyncEmpty 结束时,我看到以下警告消息:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE

当我查看代码时,测试getNumOfRenewsInLastMin() <= numberOfRenewsPerMinThreshold 始终为真(2 <= 3)

为什么是默认配置,看起来怪怪的,因为它不断产生警告!

如果有人可以给我一个解释。我想我错过了什么……

【问题讨论】:

我看到numberOfRenewsPerMinThreshold > 0 && getNumOfRenewsInLastMin() > numberOfRenewsPerMinThreshold。这适用于2 > 3 = false。你在看哪里? github.com/Netflix/eureka/blob/… 方法 isBelowRenewThresold()(恕我直言,这是正确的)和 FTL 用法 之间可能存在问题。会不会是 FTL 使用了一种方法,该方法返回一个预期为布尔值的数字? 对不起,请忽略我最后的回答。它似乎工作正常。我的尤里卡控制台显示更新(4)确实低于阈值(5)。由于我有 2 个客户,更新通常为 4。最大的问题是,为什么阈值大于预期的更新?这似乎也是这个问题的情况 【参考方案1】:

遇到同样的问题,我在 application.properties 中尝试过。

eureka.client.lease.duration=10    
eureka.instance.leaseRenewalIntervalInSeconds=5    
eureka.instance.leaseExpirationDurationInSeconds=2 

【讨论】:

【参考方案2】:

我有同样的问题,并进行了一些调查。警告消息的根本原因是更新正好比阈值低 1。

当你启动一个普通的 eureka 服务器并且没有注册任何客户端时会发生这种情况。它将在更新阈值处获得 1。 当您现在注册一个客户端时,来自客户端的 2 只是添加到已经存在的那个中。因此,现在将续订阈值设为 3,这比一个客户所能获得的续订要高。等待几分钟(约 4 分钟),就会出现警告。

我的 application.yml 是:

spring:
  application:
    name: service-registry
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
          defaultZone: http://$eureka.instance.hostname:$server.port/eureka/

我正在使用 Brixton.RC1。

在同一主题中找到另外两个 SQ 问题:

Understanding Spring Cloud Eureka Server self preservation and renew threshold

Spring Eureka server shows RENEWALS ARE LESSER THAN THE THRESHOLD

【讨论】:

【参考方案3】:

这里有一些细节:

您可以在下面找到允许在此文件中显示消息的测试。

https://github.com/spring-cloud/spring-cloud-netflix/blob/master/spring-cloud-netflix-eureka-server/src/main/resources/templates/eureka/navbar.ftl

的价值 “isBelowRenewThresold”来自以下代码:

model.put("isBelowRenewThresold", registry.isBelowRenewThresold() == 1);

调用的方法可以在以下文件中找到:

https://github.com/Netflix/eureka/blob/master/eureka-core/src/main/java/com/netflix/eureka/registry/PeerAwareInstanceRegistryImpl.java

感谢您的帮助。

问候, 斯蒂芬

【讨论】:

以上是关于续订阈值和续订(最后一分钟)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Eureka UX 上显示的某些元素的解释是啥

ADAL使用AcquireTokenAsync和现有JWT令牌续订令牌

如何处理自动续订重新订阅?

Spring Cloud Eureka Server自我保存和续订门槛

Stripe 提前续订订阅

自动续订订阅错误