Spring boot zuul(没有尤里卡)-总是以;转发错误“;

Spring boot zuul(没有尤里卡)-总是以;转发错误“;,spring-boot,spring-cloud,netflix-zuul,spring-cloud-netflix,netflix-ribbon,Spring Boot,Spring Cloud,Netflix Zuul,Spring Cloud Netflix,Netflix Ribbon,我使用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都启动并运行时,一切正常 当服务器列表中的第一个实例关闭时,请求以以下错误结束: com.netflix.zuul.exc

我使用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
都启动并运行时,一切正常

服务器列表
中的第一个实例关闭时,请求以以下错误结束:

com.netflix.zuul.exception.zuuleexception:转发错误

我正在使用以下版本配置:

springboot:2.0.7.发布
springcloud:Finchley.SR2

如果有人遇到过类似的问题并设法找到了解决方案,请在这里分享


谢谢。

默认情况下,当上游服务不可用时,Zuul会抛出异常(而不是抛出503/404)。GitHub线程中已经详细讨论了这种行为

要处理此情况并将Zuul配置为在(当前和下一个)可用实例上重试,您需要做两件事:

  • 扩展ErrorFilter并使用自定义行为处理异常
  • 为Zuul配置重试
扩展ErrorFilter并提供自定义逻辑以返回404或503状态代码。处理此异常的一些方法在此SO线程中进行了解释:

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

zuul:
  retryable: true

ribbon:
  MaxAutoRetries: 1
  MaxAutoRetriesNextServer: 3
  OkToRetryOnAllOperations: true

yourApplication:
    ribbon:
        listOfServers: instance-1-url, instance-2-url
请注意,springretry是Zuul中retry的依赖项