Zuul的fallback容错处理逻辑 , 只针对timeout异常处理 , 当请求被Zuul路由后 , 只要服务有返回(包括异常) , 都不会触发Zuul的fallback容错逻辑 。
因为对于Zuul网关来说 , 做请求路由分发的时候 , 结果由远程服务运算的 。 那么远程服务反馈了异常信息 , Zuul网关不会处理异常 , 因为无法确定这个错误是否是应用真实想要反馈给客户端的 。
4.2 代码示例/** * 如果需要在Zuul网关服务中增加容错处理fallback , 需要实现接口ZuulFallbackProvider * spring-cloud框架 , 在Edgware版本(包括)之后 , 声明接口ZuulFallbackProvider过期失效 ,* 提供了新的ZuulFallbackProvider的子接口 - FallbackProvider * 在老版本中提供的ZuulFallbackProvider中 , 定义了两个方法 。*- String getRoute() *当前的fallback容错处理逻辑处理的是哪一个服务 。 可以使用通配符‘*’代表为全部的服务提供容错处理 。*如果只为某一个服务提供容错 , 返回对应服务的spring.application.name值 。*- ClientHttpResponse fallbackResponse() *当服务发生错误的时候 , 如何容错 。* 新版本中提供的FallbackProvider提供了新的方法 。*- ClientHttpResponse fallbackResponse(Throwable cause) *如果使用新版本中定义的接口来做容错处理 , 容错处理逻辑 , 只运行子接口中定义的新方法 。 也就是有参方法 。*是为远程服务发生异常的时候 , 通过异常的类型来运行不同的容错逻辑 。*/@Componentpublic class TestFallBbackProvider implements FallbackProvider {/*** return - 返回fallback处理哪一个服务 。 返回的是服务的名称* 推荐 - 为指定的服务定义特性化的fallback逻辑 。* 推荐 - 提供一个处理所有服务的fallback逻辑 。* 好处 - 服务某个服务发生超时 , 那么指定的fallback逻辑执行 。 如果有新服务上线 , 未提供fallback逻辑 , 有一个通用的 。*/@Overridepublic String getRoute() {return "eureka-application-service";}/*** fallback逻辑 。 在早期版本中使用 。* Edgware版本之后 , ZuulFallbackProvider接口过期 , 提供了新的子接口FallbackProvider* 子接口中提供了方法ClientHttpResponse fallbackResponse(Throwable cause) 。* 优先调用子接口新定义的fallback处理逻辑 。*/@Overridepublic ClientHttpResponse fallbackResponse() {System.out.println("ClientHttpResponse fallbackResponse()");List