我需要一些帮助来理解为什么在Eureka中注册的服务尽管没有实际运行但仍希望彼此通信。例如,我在Eureka注册了服务A和服务B.如果我关闭服务B,服务A仍会尝试与服务B通信30秒到3分钟,即使它没有运行。这样做的目的是什么?它有什么办法吗?谢谢!
答案 0 :(得分:1)
如您所知,Netflix正在运行基于Eureka的大量服务器实例。因此,通过Eureka查找实例的开销可能是Netflix的巨大开销。我猜这就是为什么Eureka有缓存,轮询间隔和其他功能导致刷新实例状态延迟的原因。
幸运的是,您可以使用以下属性调整此延迟。
Eureka Server - eureka.server.responseCacheUpdateInvervalMs
Eureka客户端(API来电) - eureka.client.registryFetchIntervalSeconds
Eureka客户端(API提供商) eureka.instance.leaseExpirationDurationInSeconds
如果您运行的实例数量不是很大,通常可以减少以上属性。
还有另一个与此延迟有关的财产。
eureka.instance.leaseRenewalIntervalInSeconds
此属性设置Eureka客户端的心跳间隔。默认值为30秒,但您无法调整此值,因为Eureka服务器具有一些硬编码逻辑,假定此时间段为30秒。
答案 1 :(得分:0)
我相信你指的是尤里卡的自我保护模式。
这是为了什么目的?
自保护模式旨在处理短时间网络故障。一旦实例注册,Eureka服务器就不会永远将实例保留在注册表中。当实例首次注册时,它会使用实例设置租约续订策略。该策略包括实例在从注册表中逐出之前可能遗漏的心跳次数。
当您running multiple Eureka servers时,自我保护模式非常重要。
您可以查看this SO问题,了解有关自我保护模式的详细信息。
还有什么方法吗?
默认情况下启用。它可以被禁用。
您还可以调整一些属性,以确保尽快驱逐死实例 。
请仔细阅读上面链接的问题,以获取有关要调整哪些属性的帮助。