Eureka никогда не отменяет регистрацию сервиса

В настоящее время я сталкиваюсь с проблемой, когда Eureka не отменяет регистрацию зарегистрированной службы. Я вытащил пример сервера Eureka прямо из Git hub и сделал только одно изменение, eureka.enableSelfPreservation = false. Мое приложение.yml выглядит так:

server:
  port: 8761
eureka:
  enableSelfPreservation: false
  client:
    registerWithEureka: false
fetchRegistry: false
  server:
    waitTimeInMsWhenSyncEmpty: 0

Я читал, что если 85% зарегистрированных услуг перестают доставлять сердцебиения в течение 15 минут, Eureka предполагает, что проблема связана с сетью и не дерегистрации услуг, которые не отвечают. В моем случае у меня только одна услуга работает, поэтому я отключил режим самосохранения. Я резко убиваю процесс, и Эврика оставляет службу зарегистрированной на то, что кажется неопределенным количеством времени.

заявление моего клиента.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 читает:

срочно! ЭВРИКА МОЖЕТ НЕПРАВИЛЬНО УТВЕРЖДАТЬ, ЧТО ЭКЗЕМПЛЯРЫ, КОГДА ОНИ НЕ РАБОТАЮТ. ОБНОВЛЕНИЯ МЕНЬШЕ ПОРОГОВОГО ЗНАЧЕНИЯ, И, СЛЕДОВАТЕЛЬНО, ЭКЗЕМПЛЯРЫ НЕ ИСТЕКАЮТ ТОЛЬКО ДЛЯ БЕЗОПАСНОСТИ.

как я могу предотвратить такое поведение?

2 ответов


Я понял, что режим самосохранения никогда не был отключен. Оказывается, фактическое свойство

eureka.server.enableSelfPreservation=false

(см. DefaultEurekaServerConfig код), который я нигде не нашел документально. Это решило мою проблему.


Я сделал службу дерегистрации работы, установив ниже значения

серверное приложение Eureka.в формате YML

eureka:
  server:
    enableSelfPreservation: false

приложения Службы.в формате YML

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 1
    leaseExpirationDurationInSeconds: 2

полный пример здесь https://github.com/ExampleDriven/spring-cloud-eureka-example