首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring cloud netflix:断路器之hystrix client

断路器: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“。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180425G1YHVL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券