我直接从git hub拉出了Eureka服务器示例,只进行了一次更改, eureka.enableSelfPreservation = false
. 我的application.yml看起来像这样:
server:
port: 8761
eureka:
enableSelfPreservation: false
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
我已经读过,如果85%的注册服务在15分钟内停止提供心跳,Eureka认为问题与网络有关,并且不会取消注册没有响应的服务 . 在我的情况下,我只有一个服务正在运行,所以我禁用了自我保护模式 . 我突然杀了这个过程,尤里卡离开了注册的服务,看似无限期 .
我的客户的application.yml看起来像这样:
eureka:
instance:
leaseRenewalIntervalInSeconds: 3
client:
healthcheck:
enabled: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
appInfo:
replicate:
interval: 3
initial:
replicate:
time: 3
spring:
rabbitmq:
addresses: ${vcap.services.${PREFIX:}rabbitmq.credentials.uri:amqp://${RABBITMQ_HOST:localhost}:${RABBITMQ_PORT:5672}}
我的目标是创建一个演示,其中Eureka快速检测到服务不再运行,另一个启动的服务可以快速注册 .
截至目前,一旦eureka客户端启动,它将在3秒内注册 . 当服务突然终止时,它永远不会取消注册 . 在我终止服务后,Eureka仪表板显示:
紧急!当EUREKA不是时,EUREKA可能会被不正当地提出申请 . 更新的数量远远超过了阈值,而且这些实际情况并未到期,只是为了安全起见 .
我该如何防止这种行为?
2 回答
我通过设置以下值来进行服务注销工作
Eureka服务器application.yml
服务application.yml
完整的例子在这里https://github.com/ExampleDriven/spring-cloud-eureka-example
我意识到自我保护模式从未真正被禁用 . 事实证明,实际的 property 是
(参见DefaultEurekaServerConfig代码),我在任何地方都没有找到 . 这解决了我的问题 .