纯自用总结
包导入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.5.18</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
<version>1.5.18</version>
</dependency>
原理分析
工作流程
1.创建Hystrix对象。
HystrixCommand:熔断操作后只返回单个操作结果(一般是一个方法)
HystrixObservableCommand:熔断操作后只返回多个操作结果
2.命令执行
excute():同步执行
queue(): 异步执行,返回一个Future对象。
这两种命令执行是由HystrixCommand实现的。
observe():返回一个 Hot Observable对象,代表操作的多个结果
toObservable():返回一个Cold Observable对象。
这两种命令执行由HystrixObservableCommand实现。
3.当前命令的结果是否在缓存中
4.断路器是否打开
打开即意味着原本应当执行的服务出现故障,那么就将进入fallback指定的操作进行执行。也就是进入第8步。
5.线程池/请求队列 是否占满
6.请求依赖服务,即代码中指定的,在没有故障的情况下应当顺利执行的服务。
执行时间有时长规定,结果返回时间超过阈值,交由fallback处理
7.断路器健康度计算
断路器会根据Hystrix返回的数据来决定是否将某个依赖服务的断路器打开,即判定其是否故障。
8.fallback处理
9.返回成功响应
断路器原理
注意:断路器打开状态时,是拒绝服务请求通过的
静态类HystrixCircuitBreakerImpl是断路器的核心实现类。
isOpen():获取断路器的打开/关闭状态
allowRequest():判断请求是否允许
markSuccess():关闭断路器,并重置度量指标对象
请求合并
Hystrix可以将一个很短的时间内(默认10毫秒)对同一个依赖服务的多次请求进行整合并批量发起请求的功能。
使用@HystrixCommand注解
注意:Hystrix为每个依赖服务都建立了独立的线程池。