Там должно быть 3 вещи, которые мы должны держать на макушке для запроса, который прошел через Zuul
1) Согласно этому документу - https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.4.3.RELEASE/single/spring-cloud-netflix.html#_zuul_eager_application_context_loading
Zuulвнутренне использует ленту для вызова удаленных URL-адресов, и клиенты ленты по умолчанию загружаются Spring Cloud при первом вызове.Это поведение можно изменить для Zuul, используя следующую конфигурацию, и это приведет к тому, что дочерние ленточные контексты приложения будут загружены во время запуска приложения.
application.yaml
zuul:
ribbon:
eager-load:
enabled: true
application.свойства
zuul.ribbon.eager-load.enabled= true
2) В соответствии с этим документом - http://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_service_discovery_configuration
Конфигурация обнаружения службы --- Если Zuul использует обнаружение службы, вам нужно два тайм-аутаследует учитывать тайм-аут Hystrix (поскольку по умолчанию все маршруты заключены в команды Hystrix) и тайм-аут ленты.Время ожидания Hystrix должно учитывать время ожидания чтения и подключения ленты, а также общее количество повторных попыток для этой службы.По умолчанию Spring Cloud Zuul сделает все возможное, чтобы рассчитать тайм-аут Hystrix, если вы не укажете тайм-аут Hystrix.
Тайм-аут Hystrix рассчитывается по следующей формуле:
(ribbon.ConnectTimeout + ribbon.ReadTimeout) * (ribbon.MaxAutoRetries + 1) *
(ribbon.MaxAutoRetriesNextServer + 1)
AsНапример, если вы зададите следующие свойства в свойствах вашего приложения
application.yaml
ribbon:
ReadTimeout:100
ConnectTimeout:500
MaxAutoRetries:1
MaxAutoRetriesNextServer:1
application.properties
ribbon.ReadTimeout= 100
ribbon.ConnectTimeout= 500
ribbon.MaxAutoRetries= 1
ribbon.MaxAutoRetriesNextServer= 1
Тогда тайм-аут Hystrix (для всехмаршруты в этом случае) будут установлены на 2400 мс.
В моей конфигурации приложения zuul я добавил следующие свойства.И он работает для моего первого звонка без каких-либо ошибок.
application.yaml
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 11000
ribbon:
ConnectTimeout: 10000
ReadTimeout: 10000
application.properties
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds= 11000
ribbon.ConnectTimeout= 10000
ribbon.ReadTimeout: 10000
3) Это самый простой способ.Отключите время выполнения Hystrix.
Согласно этому документу - https://github.com/Netflix/Hystrix/wiki/Configuration#executiontimeoutenabled
Следующее свойство отключит время выполнения Hystrix в Zuul
application.properties
hystrix.command.default.execution.timeout.enabled=false
Если мы будем помнить эти 3 сценария, то мы можем легко получить решение ZuulException (SendErrorFilter).