断路器:Hystrix客户端
Netflix已经提供了一个Hystrix库,该库实现了断路器模式(查阅:http://martinfowler.com/bliki/CircuitBreaker.html)。在微服务体系结构中,通常有多层服务调用。
图1:微服务图
底层服务故障可能会导致故障蔓延。当调用特定服务达到特定的阈值时(Hystrix中默认为5秒内发生20次故障),断路器会打开且不会发起调用。开发者可以为发生错误和断路的情况提供fallback。
图2:Hystrix fallback避免故障蔓延
断路可以防止故障蔓延,并且让故障服务有时间来恢复。fallback可以是另一个Hystrix受保护的调用,静态数据或合理的空值。fallback可以被链接,所以第一次fallback会导致其他业务调用转而回退到静态数据(原文:Fallbacks may be chained so the first fallback makes some otherbusiness call which in turn falls back to static data.)。
包含Hystrix
maven依赖:
示例:
@HystrixCommand注解由一个名为“javanica(https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica)“的Netflix contrib库提供。Spring Cloud自动将带有该注解的Spring bean包装在连接到Hystrix断路器的代理中。断路器会通过计算来决定何时打开和关闭,以及在发生故障时应采取的措施。
你可以用带有@HystrixProperty注解列表的commandProperties来配置@HystrixCommand。详情请查阅https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica#configuration和https://github.com/Netflix/Hystrix/wiki/Configuration。
传播Security Context或者使用Spring Scope
如果你想传播一些线程本地上下文到@HystrixCommand,默认声明不会起作用,因为它是在线程池中执行这些命令(在超时的情况下)。你可以使用某种配置将Hystrix切换为与调用方使用相同的线程,或者直接在注解中配置使用不同的“隔离策略“。例如:
如果使用@SessionScope或@RequestScope,则同样适用。你要知道什么时候需要执行此操作,因为运行时异常无法找到范围内的上下文。
你也可以选择将hystrix.shareSecurityContext属性设置为true。这样会自动配置一个Hystrix并发策略插件钩子,它会将SecurityContext从主线程传输到执行Hystrix命令的线程中。hystrix不允许注册多个hystrix并发策略,你可以通过将自己的HystrixConcurrencyStrategy声明为Spring bean来进行扩展,Spring Cloud将在Spring上下文中查找你的实现,并将其包装在自己的插件中。
健康指标
可以通过调用应用程序的“/health“接口来查询连接断路器的状态。
Hystrix Metrics Stream
通过包含spring-boot-actuator依赖来启用Hystrix MetricsStream。管理端点:“/hystrix.stream“。
领取专属 10元无门槛券
私享最新 技术干货