首页 文章

尤里卡从不注销服务

提问于
浏览
27

我直接从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 回答

  • 22

    我通过设置以下值来进行服务注销工作

    Eureka服务器application.yml

    eureka:
      server:
        enableSelfPreservation: false
    

    服务application.yml

    eureka:
      instance:
        leaseRenewalIntervalInSeconds: 1
        leaseExpirationDurationInSeconds: 2
    

    完整的例子在这里https://github.com/ExampleDriven/spring-cloud-eureka-example

  • 32

    我意识到自我保护模式从未真正被禁用 . 事实证明,实际的 property 是

    eureka.server.enableSelfPreservation=false
    

    (参见DefaultEurekaServerConfig代码),我在任何地方都没有找到 . 这解决了我的问题 .

相关问题