Spring Cloud Hystrix GatewayFilter工厂
Hystrix是Netflix的一个库,它实现了断路器模式。Hystrix
GatewayFilter允许您将断路器引入网关路由,保护服务免受级联故障的影响,并允许您在下游故障的情况下提供后备响应。
要在您的项目中启用Hystrix
GatewayFilters,请添加对Spring Cloud Netflix中的 spring-cloud-starter-netflix-hystrix
的依赖。
Hystrix
GatewayFilter工厂需要一个name
参数,它是HystrixCommand
的名称。
application.yml。
spring: cloud: gateway: routes: - id: hystrix_route uri: https://example.org filters: - Hystrix=myCommandName
这会将其余过滤器包装在命令名称为myCommandName
的HystrixCommand
中。
Hystrix过滤器还可以接受可选的fallbackUri
参数。当前,仅支持forward:
计划的URI。如果调用了后备,则请求将被转发到与URI相匹配的控制器。
application.yml。
spring: cloud: gateway: routes: - id: hystrix_route uri: lb://backing-service:8088 predicates: - Path=/consumingserviceendpoint filters: - name: Hystrix args: name: fallbackcmd fallbackUri: forward:/incaseoffailureusethis - RewritePath=/consumingserviceendpoint, /backingserviceendpoint
调用Hystrix后备广告时,它将转发到/incaseoffailureusethis
URI。请注意,此示例还通过目标URI上的lb
前缀演示了(可选)Spring Cloud Netflix Ribbon负载均衡。
主要方案是将fallbackUri
用于网关应用程序中的内部控制器或处理程序。但是,也可以将请求重新路由到外部应用程序中的控制器或处理程序,如下所示:
application.yml。
spring: cloud: gateway: routes: - id: ingredients uri: lb://ingredients predicates: - Path=//ingredients/** filters: - name: Hystrix args: name: fetchIngredients fallbackUri: forward:/fallback - id: ingredients-fallback uri: http://localhost:9994 predicates: - Path=/fallback
在此示例中,网关应用程序中没有fallback
端点或处理程序,但是,另一个应用程序中没有fallback
端点或处理程序,已在http://localhost:9994
下注册。
如果将请求转发到后备,则Hystrix网关过滤器还会提供引起请求的Throwable
。它作为ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR
属性添加到ServerWebExchange
中,可以在网关应用程序中处理后备时使用。
对于外部控制器/处理程序方案,可以添加带有异常详细信息的标头。您可以在FallbackHeaders GatewayFilter Factory部分中找到有关它的更多信息。
Hystrix设置(例如超时)可以使用全局默认值进行配置,也可以使用Hystrix Wiki中所述的应用程序属性在逐条路由的基础上进行配置。
要为上述示例路由设置5秒超时,将使用以下配置:
application.yml。
hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000
更多建议: