Jhipster повторяет вызовы службы
Я использую JHipster версии 4.6.2 на моем шлюзе. У меня есть реестр JHipster и два экземпляра одного и того же микросервиса. В реестре JHipster я вижу, что шлюз и оба экземпляра микросервиса зарегистрированы правильно. Я могу настроить, посмотреть здоровье и так далее. Короче все работает нормально.
Микросервис был создан с более новой версией JHipster (4.11.1). И шлюз, и микросервисы, кажется, хорошо взаимодействуют. Например, стандартный (сгенерированный) пользовательский интерфейс на шлюзе способен извлекать данные (сущности) из микросервисов. На шлюзе я просто использую логику, сгенерированную Jhipster для получения данных из микросервиса. Я вижу в журналах, что звонки направляются в оба экземпляра микросервиса.
Проблема, с которой я сталкиваюсь, заключается в том, что при отключении одного экземпляра микросервиса шлюз все еще иногда пытается перенаправить вызов службы на уже отключенный экземпляр микросервиса. Конечно, через некоторое время все сервисные вызовы перенаправляются правильно только на правильный / работающий экземпляр microservices. Но иногда сразу после закрытия одного экземпляра микросервиса вызов может быть перенаправлен на "неправильный" экземпляр.
Я ожидал, что такие компоненты, как tape, zuul и eureka, автоматически попробуют другой экземпляр микросервиса, если вызов службы к первому экземпляру микросервиса завершится неудачно. Верны ли мои ожидания? Должна ли Jhipster "платформа микросервисов" автоматически повторять вызов службы для другого зарегистрированного экземпляра микросервиса?
Если по умолчанию повторная попытка не поддерживается, что я должен сделать, чтобы это произошло?
1 ответ
Спасибо за ваш ответ, Гаэль. Я попытался настроить по ссылке, которую вы предоставили, но это не полностью решило мой вопрос.
Когда мне удалось избавиться от исходного исключения ("com.netflix.client.ClientException: null"), я столкнулся со следующей проблемой ("Причина: com.netflix.client.ClientException: число повторных попыток на следующем сервере превысило максимум 2 повторные попытки"., во время разговора: 192.168.1.4:8082"). Мне нужно было настроить MaxAutoRetriesNextServer (см. https://github.com/spring-cloud/spring-cloud-netflix/issues/2052). Это продвинуло меня на один шаг вперед, но все еще получило исключения Hystrix ("Причины: com.netflix.hystrix.exception.HystrixRuntimeException: тайм-аут myservice и откат недоступен".).
Наконец, с помощью этих двух ссылок ( https://github.com/jhipster/generator-jhipster/issues/3323 и https://github.com/spring-cloud/spring-cloud-netflix/issues/321) мне удалось сделать настройку, обеспечивающую 100% доступность в моих тестах (пока).
Это конфигурация, которая работала для меня. Я не полностью знаю все подробности всех этих настроек, поэтому, если вы обнаружите какие-либо несоответствия в них или у вас есть предложения по улучшению, поднимите их. Спасибо!
zuul:
routes:
myservice:
retryable: true
host:
connect-timeout-millis: 5000
socket-timeout-millis: 20000
ribbon:
MaxAutoRetries: 1
MaxAutoRetriesNextServer: 5
OkToRetryOnAllOperations: true
ReadTimeout: 2500
restclient:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 20000