web-dev-qa-db-fra.com

Eureka ne désenregistre jamais un service

Je suis actuellement confronté à un problème où Eureka ne désenregistre pas un service enregistré. J'ai tiré l'exemple du serveur Eureka directement à partir de git hub et effectué une seule modification, eureka.enableSelfPreservation = false. Mon application.yml ressemble à ceci:

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

J'ai lu que si 85% des services enregistrés cessent de fournir des pulsations dans les 15 minutes, Eureka suppose que le problème est lié au réseau et ne désenregistre pas les services qui ne répondent pas. Dans mon cas, je n'ai qu'un seul service en cours d'exécution, j'ai donc désactivé le mode d'auto-conservation. Je tue brusquement le processus et Eureka laisse le service enregistré pour ce qui semble être une durée indéfinie.

Le fichier application.yml de mon client ressemble à ceci:

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}}

Mon objectif est de créer une démo où Eureka détecte rapidement que le service n'est plus en cours d'exécution et qu'un autre service démarré peut s'enregistrer rapidement.

Désormais, une fois le client eureka démarré, il s'enregistre en 3 secondes. Il ne se désenregistre jamais lorsque le service est brutalement interrompu. Après avoir tué le service, le tableau de bord Eureka indique:

URGENCE! EUREKA PEUT ÊTRE INCORRECTEMENT LES INSTANCES DE RÉCLAMATION SONT HORS LORSQUE CE N'EST PAS LE cas. LES RENOUVELLEMENT SONT INFÉRIEURS AU SEUIL ET, PAR CONSÉQUENT, LES INSTANCES NE SONT PAS EXPIRÉES JUSTE POUR ÊTRE SÉCURITAIRE.

Comment puis-je empêcher ce comportement?

32
lp1776

J'ai réalisé que le mode d'auto-préservation n'était jamais réellement désactivé. Il s'avère que la propriété réelle est

eureka.server.enableSelfPreservation=false

(Voir DefaultEurekaServerConfig Code), que je n'ai trouvé nulle part. Cela a résolu mon problème.

39
lp1776

J'ai effectué le retrait de l'enregistrement du service en définissant les valeurs ci-dessous

Serveur Eureka application.yml

eureka:
  server:
    enableSelfPreservation: false

Service application.yml

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 1
    leaseExpirationDurationInSeconds: 2

L'exemple complet est ici https://github.com/ExampleDriven/spring-cloud-eureka-example

26
Peter Szanto