如何在 zuul 启用 Hystrix 断路器?

How to enable Hystrix circuit breaker at zuul?

在我的应用程序中我们使用 springboot 微服务,带有 eureka 注册表,zuul api 网关, 这里假设我有 2 个支付服务实例, 并且 zuul 使用 ribbon 将 /payment 端点负载均衡到支付服务, 当支付服务的一个节点没有响应,并且仍然在尤里卡注册时。这里我们在 Zuul api 网关配置了 hystrix 断路器,但是 hystrix 断路器没有为无响应的节点打开。

Zuul 为每个路由 (serviceId) 创建一个 Hystrix 断路器。这意味着一个 Hystrix 断路器将在所有支付服务实例之间共享

Zuul 为每个路由创建的断路器不是为了从路由列表中删除不健康的实例。只是为了防止一种服务宕机导致的Zuul宕机。

假设您使用的是 Hystrix 的默认配置。如果你有3个支付服务实例,3个中有2个实例宕机,支付服务的熔断器将被打开(因为熔断失败的默认阈值是50%)。这意味着从 Zuul 到您的支付服务(包括您的一个健康实例)的所有流量都将被阻止。

您想要的东西 - 从路由列表中删除不健康的实例 - 是 Ribbon 的角色。 Ribbon 定义了许多接口来定义其行为,如 IRule、IPing。他们中的一些人拥有你想要的能力。

可以使用 ribbon 实现,方法是将负载平衡策略更改为 <ServiceName>: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule https://github.com/Netflix/ribbon/wiki/Working-with-load-balancers