Hystrix中的断路器是如何决策熔断和记实信息的呢?
官方提供的执行流程图
每个熔断器默认维护10个bucket,每秒一个bucket,每个blucket记录成功,失败,超时,拒绝的状态,
默认错误超过50%且10秒内超过20个请求进行中断拦截.
- 断路器接口:HystrixCircuitBreaker,其中内部类对断路器接口进行了实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public interface HystrixCircuitBreaker {
// 每个Hystrix命令的请求都通过该方法判读是否被执行
public boolean allowRequest();
// 返回当前断路器是否打开
public boolean isOpen();
// 用来闭合断路器
void markSuccess();
// 每个HystrixCommand有各自的CircuitBreaker
// 用Map集合维护一个HystrixCommand和它相应的CircuitBreaker的关系
public static class Factory {}
// 默认断路器实现
static class HystrixCircuitBreakerImpl implements HystrixCircuitBreaker {}
// 啥也不做的断路器实现
static class NoOpCircuitBreaker implements HystrixCircuitBreaker {}
} - HystrixCircuitBreaker接口中的静态内部类Factory实现如下:
1 | public static class Factory { |
- HystrixCircuitBreaker接口中的静态内部类HystrixCircuitBreakerImpl实现,即断路器的默认释实现如下:
1 | /* package */static class HystrixCircuitBreakerImpl implements HystrixCircuitBreaker { |