【发布时间】:2016-02-28 12:59:09
【问题描述】:
我是开发微服务的新手,虽然我已经研究了一段时间,阅读了 Spring 的文档和 Netflix 的文档。
我已经开始了一个简单的项目available on Github。它基本上是一个 Eureka 服务器(Archimedes)和三个 Eureka 客户端微服务(一个公共 API 和两个私有 API)。详细说明请查看 github 的自述文件。
关键是,当一切都在运行时,我希望如果其中一个私有微服务被杀死,Eureka 服务器会意识到并将其从注册表中删除。
我found this question on Stackoverflow,解决方案通过在 Eureka 服务器配置中使用 enableSelfPreservation:false。一段时间后执行此操作,被终止的服务会按预期消失。
但是我可以看到以下消息:
自保存模式已关闭。这可能无法保护实例 在网络/其他问题的情况下到期。
1.自我保护的目的是什么? doc 声明在 上进行自我保存“客户端可以获得不再存在的实例”。那么什么时候开启/关闭它比较好呢?
此外,当自我保护开启时,您可能会在 Eureka Server 控制台警告中收到一条未完成的消息:
紧急情况! EUREKA 可能不正确地声称实例已启动 他们不是。续订小于阈值,因此 为了安全起见,实例不会过期。
现在,继续使用 Spring Eureka 控制台。
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
我遇到了一个奇怪的阈值计数行为:当我单独启动 Eureka Server 时,阈值是 1。
2。我有一个 Eureka 服务器并配置了registerWithEureka: false 以防止它在另一台服务器上注册。那么,为什么它会出现在阈值计数中?
3.对于每个客户,我开始阈值计数增加 +2。我猜这是因为他们每分钟发送 2 条更新消息,对吗?
4. Eureka 服务器从不发送更新,因此最后一分钟更新始终低于阈值。这正常吗?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
服务器配置:
server:
port: ${PORT:8761}
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enableSelfPreservation: false
# waitTimeInMsWhenSyncEmpty: 0
客户端 1 配置:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true
【问题讨论】:
-
我想花时间回答这个问题。情况很复杂。一些答案在 Netflix 代码中,而其他答案是配置。我希望我的答案最终成为 Spring Cloud 文档的一部分,但它可能会在感恩节之后,除非我的同事在此之前回答。
-
这是来自 Netflix 的一点背景:github.com/Netflix/eureka/wiki/…
-
@spencergibb 这快 9 个月了,没有答案.. 有什么意见吗?
-
@spencergibb 现在已经一年多了。是否还有机会随时得到明确的答复?某种圣诞礼物:)
标签: spring spring-cloud netflix-eureka