我是开发微服务的新手,尽管我已经研究了一段时间,阅读了 Spring 和 Netflix 的文档。
我已经开始了一个简单的项目 可以在 Github 上找到。它基本上是一个 Eureka 服务器(Archimedes)和三个 Eureka 客户端微服务(一个公共 API 和两个私有 API)。检查 github 的自述文件以获得详细描述。
关键是,当所有事情都在运行时,我希望如果一个私有微服务被终止,Eureka 服务器会实现并从注册表中删除它。
I 在 Stackoverflow 上找到了这个问题,并且该解决方案通过在 Eureka Server 配置中使用 enableSelfPreservation:false
来传递。在一段时间后执行此操作,被终止的服务将如预期的那样消失。
然而,我可以看到以下信息:
自我保存模式已关闭。这可能不会保护实例 网络/其他问题的过期。
1.自我保护的目的是什么?医生表明,与自我保存的 “客户可以得到不再存在的实例”。那么什么时候开/关是明智的呢?
此外,当自我保存打开时,您可能会在 Eureka 服务器控制台中收到一个突出的消息警告:
紧急情况! 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
服务器 cfg:
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 cfg:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true