фон
Я использую Spring облако Brixton.RC2, с Zuul и Eureka.Zuul/Лента/Hystrix не на повторение другого экземпляра
У меня есть один шлюз с @EnableZuulProxy
и book-service
с методом status
. Через конфигурацию я могу эмулировать работу по методу status
, спящий определенное количество времени.
Маршрут по Zuul просто
zuul.routes.foos.path=/foos/**
zuul.routes.foos.serviceId=reservation-service
Я бегу два экземпляра book-service
. Когда я устанавливаю время сна ниже порога тайм-аута Hystrix (1000 мс), я могу видеть запросы, идущие как к экземпляру книжных услуг. Это хорошо работает.
Проблема
Я понимаю, что если команда Hystrix выходит из строя, оно должно быть возможным для ленты повторить команду на другом сервере. Это должно сделать провал прозрачным для клиента.
Я прочитал конфигурацию ленты и добавили следующую конфигурацию в 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
Теперь я обновить конфигурацию, так что только одна служба спит более 1 сек, а это значит, что у меня есть одно медицинское обслуживание, и один плохой.
Когда я называю шлюзы звонков получают отправить обоих случаи, и половину вызовов возвращает 500. В шлюзе я вижу таймаут 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
Почему не Ribbon повторной попытки вызвать другой экземпляр?
Я что-то пропустил?
Ссылки
- Касается этого question (не решен)
- Ribbon configuration
- Согласно этому commit Zuul должны поддерживать повторные попытки для ленты
я добавил 'ре заповедный-service.ribbon.ConnectTimeout = 250 резервирование service.ribbon.OkToRetryOnAllOperations = верно резервирование service.ribbon.MaxAutoRetriesNextServer = 2 резервирование service.ribbon.MaxAutoRetries = 0' к моей конфигурации, но я боюсь, что это не устраняет проблему. – phoenix7360
Отлично! Я не понял, что повторения лент происходят в одной и той же системе Хистрикс. Я думал, что у каждой попытки будет своя команда Hystrix. Это имеет гораздо большее значение. – phoenix7360