【问题标题】:zuul (without eureka) - always ends up in "Forwarding error"zuul(没有尤里卡) - 总是以“转发错误”结束
【发布时间】:2023-10-28 00:55:01
【问题描述】:

我已经使用功能区(没有尤里卡)配置了 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

如果有人遇到过类似问题并设法找到解决方案,请在此处分享。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    • 扩展 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 中重试的依赖项。

    【讨论】: