zuul (без эврики) - всегда заканчивается "Ошибка пересылки" - PullRequest
0 голосов
/ 26 декабря 2018

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 28 декабря 2018

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

Чтобы обработать этот случай и настроить 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 retry - это зависимость для повтора в Zuul.

...