续订阈值和续订(最后一分钟)
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令牌续订令牌