Tle
mi stosując wiosna mętnienia Brixton.RC2 z Zuul i Eureka.Zuul/taśmy/Hystrix nie Ponowna próba na inny przykład
Mam jedną usługę gateway z @EnableZuulProxy
i book-service
metodą status
. Poprzez konfigurację mogę emulować pracę na metodzie status
, śpiąc określoną ilość czasu.
route Zuul jest prosta
zuul.routes.foos.path=/foos/**
zuul.routes.foos.serviceId=reservation-service
uruchomić dwóch wystąpień book-service
. Kiedy ustawiam czas spoczynku poniżej progu limitu czasu Hystrix (1000ms), widzę, że żądania są wysyłane do obu instancji usług książki. To działa dobrze.
Problem
Rozumiem, że jeśli komenda Hystrix zawiedzie, powinno być możliwe do wstążki, aby ponowić próbę polecenia na innym serwerze. To powinno uczynić niepowodzenie przejrzystym dla klienta.
czytam konfigurację wstążki i dodaje następującą konfigurację w 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
Teraz zaktualizować konfigurację tak, że tylko jedna usługa śpi dłużej niż 1s, co oznacza, że mam jedną służbę zdrowia, a jeden zły.
Kiedy wzywam bram wywołania uzyskać wysłać do obu instancji, a połowa połączeń zwraca 500. W bramie widzę 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
Dlaczego nie jest ponawianie wstążka zadzwonić na drugą instancję?
Czy brakuje czegoś tutaj?
Odniesienia
- Dotyczy to question (nie rozwiązany)
- Ribbon configuration
- Według tego commit Zuul powinny wspierać prób dla Wstęgę
Dodałem 're Konserwacji-service.ribbon.ConnectTimeout = 250 rezerwacja-service.ribbon.OkToRetryOnAllOperations = true rezerwacja-service.ribbon.MaxAutoRetriesNextServer = 2 rezerwacja-service.ribbon.MaxAutoRetries = 0' do mojej konfiguracji, ale obawiam się, że nie rozwiązuje problemu. – phoenix7360
Świetnie działało! Nie zdawałem sobie sprawy, że próba wstęgi odbywa się w ramach tego samego polecenia Hystrix. Myślałem, że każda próba będzie miała własne polecenie Hystrixa. Ma to o wiele większy sens. – phoenix7360