我是开发微服务的新手,虽然我已经研究了一段时间,阅读了 Spring 的文档和 Netflix 的文档。
我已经在 Github 上开始了一个简单的项目。它基本上是一个 Eureka 服务器(Archimedes)和三个 Eureka 客户端微服务(一个公共 API 和两个私有 API)。查看 github 的自述文件以获取详细说明。
关键是,当一切都在运行时,我希望如果其中一个私有微服务被终止,Eureka 服务器会意识到并将其从注册表中删除。
我在 Stackoverflow 上找到了这个问题,解决方案通过enableSelfPreservation:false
在 Eureka Server 配置中使用。一段时间后执行此操作,被杀死的服务会按预期消失。
但是我可以看到以下消息:
自我保护模式已关闭。这可能无法在网络/其他问题的情况下保护实例到期。
1.自我保存的目的是什么?该文档指出,通过“客户可以获取不再存在的实例”进行自我保存。那么什么时候开启/关闭它是可取的呢?
此外,当自我保存开启时,您可能会在 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