zuul (без eureka) - всегда заканчивается ошибкой переадресации

Я настроил zuul с двумя экземплярами, используя ленту (без eureka), как показано ниже:

zuul.retryable=true
zuul.routes.simple-ms-app.serviceId: client
client.ribbon.listOfServers=http://localhost:7788,http://localhost:8877

Когда оба экземпляра 7788 & 8877 запущены и работают, все идет нормально.

Когда первый экземпляр в listOfServers не работает, запрос завершается следующей ошибкой:

com.netflix.zuul.exception.ZuulException: Forwarding error

Я использую следующую конфигурацию версии:

spring-boot : 2.0.7.RELEASE spring-cloud: Finchley.SR2

Если кто-то сталкивался с подобной проблемой и нашел решение, пожалуйста, поделитесь им здесь.

Спасибо.


person snmaddula    schedule 26.12.2018    source источник


Ответы (1)


По умолчанию Zuul выдает исключение (вместо выдачи 503/404), когда вышестоящая служба недоступна. Это поведение подробно обсуждалось в Zuul пропускает 503 исключения из вышестоящих микросервисов Ветка GitHub.

Чтобы обработать этот случай и настроить Zuul для повторных попыток (текущего и следующего) доступных экземпляров, вам нужно сделать две вещи:

  • Расширьте ErrorFilter и обработайте исключение с помощью пользовательского поведения.
  • Настроить повтор для Zuul

Расширьте ErrorFilter и предоставьте пользовательскую логику для возврата кода состояния 404 или 503. Некоторые подходы к работе с этим исключением объясняются в этой теме SO: Настройка исключения Zuul.

Повторить попытку в Zuul можно с помощью следующих свойств приложения:

zuul:
  retryable: true

ribbon:
  MaxAutoRetries: 1
  MaxAutoRetriesNextServer: 3
  OkToRetryOnAllOperations: true

yourApplication:
    ribbon:
        listOfServers: instance-1-url, instance-2-url

Обратите внимание, что повторная попытка Spring является зависимостью для повторной попытки в Zuul.

person narendra-choudhary    schedule 27.12.2018