2015-09-16 15 views
23

Attualmente sto affrontando un problema in cui Eureka non annulla la registrazione di un servizio registrato. Ho estratto l'esempio del server Eureka direttamente da git hub e ho apportato una sola modifica, eureka.enableSelfPreservation = false. Il mio application.yml assomiglia a questo:Eureka non annulla mai la registrazione di un servizio

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

Ho letto che se l'85% dei servizi registrati interrompere l'erogazione di battiti cardiaci in 15 minuti, Eureka assume il problema è la rete correlata e non de-registrare i servizi che non rispondono. Nel mio caso ho solo un servizio in esecuzione, quindi ho disabilitato la modalità di autoconservazione. Sto improvvisamente uccidendo il processo e Eureka lascia il servizio registrato per quella che sembra una quantità indefinita di tempo.

application.yml del mio cliente si presenta così:

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

Il mio obiettivo è quello di creare una demo in cui Eureka rileva rapidamente il servizio non è più in esecuzione e un altro servizio che viene avviato può registrare rapidamente se stessa.

A partire da ora, una volta avviato il client eureka, si registra in 3 secondi. Semplicemente non si annulla mai quando il servizio viene interrotto bruscamente. Dopo aver eliminato il servizio, viene visualizzato il dashboard di Eureka:

EMERGENZA! EUREKA POTREBBE ESSERE INCORRETTAMENTE RECLAMI, IN QUANTO NON SONO. I RINNOVI SONO MENO DI THRESHOLD E QUINDI QUINDI NON SI STANNO SCADUTI PER ESSERE SICURI.

Come posso evitare questo comportamento?

+0

Quale versione di spring-cloud stai usando? – spencergibb

+0

Ho due progetti in corso, sto usando 1.1.0 nell'esempio che ho tirato direttamente da GitHub. Nel mio progetto attuale sto usando spring-cloud-starter-config 1.0.3. Nemmeno i clienti si stanno registrando. – lp1776

+0

Quanto tempo hai effettivamente aspettato? Posso impiegare del tempo per annullare la registrazione sulle impostazioni predefinite. –

risposta

24

Mi sono reso conto che la modalità di conservazione automatica non veniva mai disattivata. Si scopre la proprietà reale è

eureka.server.enableSelfPreservation=false 

(Vedi DefaultEurekaServerConfig Codice), che non ho trovato da nessuna parte documentata. Questo ha risolto il mio problema.

+1

Una richiesta di pull al repository di documentazione per questo problema sarebbe probabilmente molto utile per molti altri. ... Se qualcuno non l'ha già fatto. – DtechNet

18

ho fatto il servizio lavoro de-registrazione impostando la di sotto dei valori

server di application.yml Eureka

eureka: 
    server: 
    enableSelfPreservation: false 

Servizio application.yml

eureka: 
    instance: 
    leaseRenewalIntervalInSeconds: 1 
    leaseExpirationDurationInSeconds: 2 

L'esempio completo è qui https://github.com/ExampleDriven/spring-cloud-eureka-example

Problemi correlati