Подтвердить что ты не робот

Эврика никогда не отменяет услуги

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

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

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

Мой клиент 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 читает:

EMERGENCY! EUREKA МОЖЕТ БЫТЬ НЕПРАВИЛЬНЫМИ ПРЕТЕНЗИЯМИ, КОГДА ОНИ НЕ. ОБНОВЛЕНИЯ - МЕНЬШЕ, ЧЕМ ПОРОГ И НАСЛЕДИЕ ИНСТАНЦИИ НЕ ПРОДОЛЖАЮТСЯ ТОЛЬКО ДЛЯ БЕЗОПАСНОСТИ.

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

4b9b3361

Ответ 1

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

eureka.server.enableSelfPreservation=false

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

Ответ 2

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

Eureka server application.yml

eureka:
  server:
    enableSelfPreservation: false

Сервис application.yml

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 1
    leaseExpirationDurationInSeconds: 2

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