Netflix已经创建了一个名为Hystrix的库,实现了断路器的模式。在microservice架构通常有多个层的服务调用。
低水平的服务的服务失败会导致级联故障一直给到用户。当调用一个特定的服务达到一定阈值(默认5秒失败20次),打开断路器。在错误的情况下和一个开启的断路回滚应可以由开发人员提供。
有一个断路器阻止级联失败并且允许关闭服务一段时间进行愈合。回滚会被其他hystrix保护调用,静态数据或健全的空值。
代码如下:
@SpringBootApplication @EnableCircuitBreaker 公共类应用程序{ 公共静态void main (String [] args) { 了对新SpringApplicationBuilder (Application.class) web这类(真正的).run (args); } }
@ component 公开课StoreIntegration { @HystrixCommand (fallbackMethod=癲efaultStores”) 公共对象getStores (Map<字符串,Object>参数){//做的东西可能会失败 } 公共对象defaultStores (Map<字符串,Object>参数){ 返回*//*一些有用的东西, } }
@HystrixCommand是由Netflix contrib库提供,叫做javanica.spring云自动包装Spring bean与注释的代理连接到Hystrix断路器。断路器计算何时打开和关闭断路,并在失败的情况下做什么。
配置@HystrixCommand可以使用commandProperties属性的列表@HystrixProperty注释。详细请看https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica配置
https://github.com/Netflix/Hystrix/wiki/Configuration
<强> 1.1传播安全上下文或者使用弹簧范围强>
如果你想要一些线程本地上下文传播到@HystrixCommand默认声明将不会工作,因为它执行线程池中的命令(在超时的情况下)。
可以切换Hystrix使用一些配置用相同的线程调用者,或直接在注释,让它使用不同的“隔离策略”(隔离策略)。
例如:
@HystrixCommand (fallbackMethod=皊tubMyService”, commandProperties={ @HystrixProperty (name=" execution.isolation。战略”,价值=" https://www.yisu.com/zixun/SEMAPHORE ") } ) …
详细内容请参考https://github.com/Netflix/Hystrix/wiki/Configuration
<强> 1.2健康监控强>
连接的断路器的状态也暴露在调用应用程序的/健康端点。
{ " hystrix ": { “openCircuitBreakers”:( “StoreIntegration:: getStoresByLocationLink” ), “状态”:“CIRCUIT_OPEN” }, “状态”:“” }
<强> 1.3 Hystrix指标流(Hystrix指标流)强>
spring-boot-starter-actuator中实现了Hystrix指标流。暴露/hystrix.stream作为一个管理端点。
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-actuator & lt;/dependency>
Hystrix的主要好处之一是它收集关于每个HystrixCommand组指标.Hystrix仪表板显示每个断路器的健康高效的方式。
,
运行Hystrix仪表板需要在春天引导主类上标注@EnableHystrixDashboard。然后访问/Hystrix查看仪表盘,在Hystrix客户端应用使用/hystrix.stream监控。
<强> 2.1涡轮强>
看一个实例Hystrix数据对于整个系统的健康不是很有用.turbine是一个应用程序,该应用程序汇集了所有相关的/Hystrix。流端点到/turbine.stream用于Hystrix仪表板。运行涡轮使用@EnableTurbine注释你的主类,使用spring-cloud-starter-turbine这个jar。配置请参考https://github.com/Netflix/Turbine/wiki/Configuration- (1. x)
唯一的区别是turbine.instanceUrlSuffix不需要端口号前缀,因为这是自动处理,除非涡轮。instanceInsertPort=false .
涡轮机。appConfig配置是一个尤里卡服务ID列表,涡轮机将使用这个配置查询实例.turbine流在hystrix仪表板中使用如下的url配置: