在我的应用程序中,我们正在使用 springboot microservices,带有eureka注册表,zuul api网关, 这里假设我有2个支付服务实例, zuul正在使用功能区将/ payment端点负载平衡到付款服务, 当付款服务的一个节点无响应时,仍在eureka中注册。在这里,我们在Zuul apigateway上配置了hystrix断路器,但是对于没有响应的节点,hystrix断路器并未打开。
答案 0 :(得分:1)
Zuul为每个路由创建 Hystrix断路器(服务ID)。这意味着一个 Hystrix断路器将在您所有的支付服务实例之间共享。
Zuul为每个路由创建的断路器不是要从路由列表中删除不正常的实例。仅仅是为了防止Zuul的故障,这种故障可能是由一种服务故障引起的。
假定您使用的是Hystrix的默认配置。如果您有3个支付服务实例,而其中3个实例处于关闭状态,则将断开用于支付服务的断路器(因为默认的失败开门阈值为50%)。这意味着从Zuul到您的付款服务(包括您的一个正常实例)的所有流量都将被阻止。
您想要的-从路由列表中删除不正常的实例-是丝带的角色。 丝带定义了许多接口来定义其行为,例如IRule,IPing。其中一些具有您想要的能力。
答案 1 :(得分:0)
<ServiceName>:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule
可以实现的https://github.com/Netflix/ribbon/wiki/Working-with-load-balancers