Soy nuevo en el desarrollo de microservicios, aunque he estado investigando al respecto durante un tiempo, leyendo los documentos de Spring y Netflix.
Comencé un proyecto simple disponible en Github . Es básicamente un servidor Eureka (Archimedes) y tres microservicios cliente Eureka (una API pública y dos privadas). Consulte el archivo Léame de github para obtener una descripción detallada.
El punto es que cuando todo está funcionando me gustaría que si uno de los microservicios privados se mata, el servidor Eureka se dé cuenta y lo elimine del registro.
Me encontré con esta pregunta en StackOverflow , y la solución pasa por utilizar enableSelfPreservation:false
en la configuración del servidor de Eureka. Al hacer esto después de un tiempo, el servicio desactivado desaparece como se esperaba.
Sin embargo, puedo ver el siguiente mensaje:
EL MODO DE AUTO CONSERVACIÓN ESTÁ APAGADO. ESTO PUEDE NO PROTEGER LA CADUCIDAD DE LA INSTANCIA EN CASO DE PROBLEMAS DE RED U OTROS.
1. ¿Cuál es el propósito de la autoconservación? El documento establece que con la autopreservación en "los clientes pueden obtener las instancias que ya no existen" . Entonces, ¿cuándo es aconsejable tenerlo encendido / apagado?
Además, cuando la autoconservación está activada, es posible que reciba un mensaje pendiente en la advertencia de la consola del servidor Eureka:
¡EMERGENCIA! EUREKA PUEDE ESTAR RECLAMANDO INCORRECTAMENTE QUE LAS INSTANCIAS ESTÁN ACTIVADAS CUANDO NO LO ESTÁN. LAS RENOVACIONES SON MENORES QUE EL UMBRAL Y POR LO TANTO LAS INSTANCIAS NO SE ESTÁN EXPIRANDO SÓLO PARA SER SEGURO.
Ahora, continúe con Spring Eureka Console.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
Me he encontrado con un comportamiento extraño del recuento de umbral: cuando inicio el servidor Eureka solo, el umbral es 1.
2. Tengo un solo servidor Eureka y está configurado registerWithEureka: false
para evitar que se registre en otro servidor. Entonces, ¿por qué aparece en el recuento de umbral?
3. Por cada cliente que empiezo, el recuento del umbral aumenta en +2. Supongo que es porque envían 2 mensajes de renovación por minuto, ¿verdad?
4. El servidor Eureka nunca envía una renovación, por lo que la última renovación mínima siempre está por debajo del umbral. ¿Esto es normal?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
Cfg del servidor:
server:
port: ${PORT:8761}
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enableSelfPreservation: false
# waitTimeInMsWhenSyncEmpty: 0
Cliente 1 cfg:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true