Sfondo
sto usando primavera nuvola Brixton.RC2, con Zuul e Eureka.Zuul/nastro/Hystrix non riprovare su diversi esempio
Ho un servizio gateway con @EnableZuulProxy
e un book-service
con un metodo status
. Tramite la configurazione posso emulare il lavoro sul metodo status
dormendo un intervallo di tempo definito.
percorso Lo Zuul è semplice
zuul.routes.foos.path=/foos/**
zuul.routes.foos.serviceId=reservation-service
corro due istanze della book-service
. Quando imposto il tempo di sospensione al di sotto della soglia di timeout Hystrix (1000 ms), posso vedere le richieste che vanno ad entrambe le istanze dei servizi di libro. Funziona bene
Problema
ho capito che se il comando non riesce Hystrix, dovrebbe essere possibile per il nastro per ritentare il comando su un server diverso. Questo dovrebbe rendere l'errore trasparente per il cliente.
ho letto la configurazione del nastro e ha aggiunto la seguente configurazione in Zuul:
zuul.routes.reservation-service.retryable=true //not sure which one to try
zuul.routes.foos.retryable=true //not sure which one to try
ribbon.MaxAutoRetries=0 // I don't want to retry on the same host, I also tried with 1 it doesn't work either
ribbon.MaxAutoRetriesNextServer=2
ribbon.OkToRetryOnAllOperations=true
Ora aggiornare la configurazione in modo che un solo servizio dorme per più di 1 s, il che significa che ho un servizio sanitario, e uno cattivo.
Quando chiamo i gateway delle chiamate ottengono segnala ad entrambe le istanze, e la metà delle chiamate restituisce una 500. Nel gateway vedo il timeout Hystrix:
com.netflix.zuul.exception.ZuulException: Forwarding error
[...]
Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: reservation-service timed-out and no fallback available.
[...]
Caused by: java.util.concurrent.TimeoutException: null
Perché non è riprovare nastro della chiamare l'altra istanza?
Mi manca qualcosa qui?
Riferimenti
- riferisce a questo question (non risolto)
- Ribbon configuration
- Secondo questa commit Zuul dovrebbero supportare tentativi per nastro
ho aggiunto 're servation-service.ribbon.ConnectTimeout = 250 prenotazione-service.ribbon.OkToRetryOnAllOperations = true prenotazione-service.ribbon.MaxAutoRetriesNextServer = 2 prenotazione-service.ribbon.MaxAutoRetries = 0 ' per la mia configurazione, ma ho paura che non risolve il problema – phoenix7360
Ottimo ha funzionato! Non mi ero reso conto che i tentativi del nastro si verificano all'interno dello stesso comando Hystrix. Ho pensato che ogni nuovo tentativo avrebbe il proprio comando Hystrix. Ha molto più senso. – phoenix7360