zuul(无eureka)-总是以“转发错误”结尾

时间:2018-12-26 17:38:48

标签: spring-boot spring-cloud netflix-zuul spring-cloud-netflix netflix-ribbon

我使用功能区(没有eureka)将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 :(得分:0)

默认情况下,当上游服务不可用时,Zuul会引发异常(而不是引发503/404)。此行为已在Zuul swallows 503 exceptions from upstream microservices GitHub线程中进行了详细讨论。

要处理这种情况并配置Zuul以重试(当前和next)可用实例,您需要做两件事:

  • 扩展ErrorFilter并以自定义行为处理异常
  • 为Zuul配置重试

扩展ErrorFilter并提供自定义逻辑以返回404或503状态代码。在以下SO线程中介绍了一些解决此异常的方法:Customizing Zuul Exception

可以使用以下应用程序属性配置Zuul中的重试:

zuul:
  retryable: true

ribbon:
  MaxAutoRetries: 1
  MaxAutoRetriesNextServer: 3
  OkToRetryOnAllOperations: true

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

请注意,Spring重试是Zuul中重试的依赖项。