我使用功能区(没有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
如果有人遇到类似问题并设法找到解决方案,请在此处分享。
谢谢。
答案 0 :(得分:0)
默认情况下,当上游服务不可用时,Zuul会引发异常(而不是引发503/404)。此行为已在Zuul swallows 503 exceptions from upstream microservices GitHub线程中进行了详细讨论。
要处理这种情况并配置Zuul以重试(当前和next)可用实例,您需要做两件事:
扩展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中重试的依赖项。