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