spring cloud - starter - Eureka nunca anula el registro de un servicio.
spring cloud tutorial (2)
Actualmente estoy enfrentando un problema donde Eureka no anula el registro de un servicio registrado. He sacado el ejemplo del servidor Eureka directamente desde git hub e hice solo un cambio, eureka.enableSelfPreservation = false
. Mi application.yml se ve así:
server:
port: 8761
eureka:
enableSelfPreservation: false
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
He leído que si el 85% de los servicios registrados dejan de emitir latidos en 15 minutos, Eureka asume que el problema está relacionado con la red y no anula el registro de los servicios que no responden. En mi caso, solo tengo un servicio en ejecución, así que deshabilité el modo de autoconservación. Estoy matando abruptamente el proceso y Eureka deja el servicio registrado por lo que parece una cantidad de tiempo indefinida.
El archivo application.yml de mi cliente tiene este aspecto:
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}}
Mi objetivo es crear una demostración en la que Eureka detecte rápidamente que el servicio ya no se está ejecutando y que otro servicio que se inicie pueda registrarse rápidamente.
A partir de ahora, una vez que se inicia el cliente eureka, se registra en 3 segundos. Simplemente nunca se anula el registro cuando el servicio se termina abruptamente. Después de matar el servicio, el panel de Eureka lee:
¡EMERGENCIA! EUREKA PUEDE SER INCORRECTAMENTE RECLAMAR QUE LAS INSTANCIAS ESTÁN ARRIBA CUANDO NO ESTÁN. LOS RENOVACIONES SON MENOS QUE EL UMBRAL Y, ENTONCES, LAS INSTANCIAS NO SE EXPIRAN PARA SER SEGURAS.
¿Cómo puedo prevenir este comportamiento?
Me di cuenta de que el modo de autoconservación nunca se desactivaba. Resulta que la propiedad real es
eureka.server.enableSelfPreservation=false
(Ver Código DefaultEurekaServerConfig ), que no he encontrado documentado en ninguna parte. Esto resolvió mi problema.
Realicé el trabajo de desregistro estableciendo los siguientes valores
Eureka server application.yml
eureka:
server:
enableSelfPreservation: false
Servicio application.yml
eureka:
instance:
leaseRenewalIntervalInSeconds: 1
leaseExpirationDurationInSeconds: 2
El ejemplo completo está aquí https://github.com/ExampleDriven/spring-cloud-eureka-example