文章目录
CircuitBreakerStateMachine
熔断器有限状态器,熔断器核心接口CircuitBreaker的实现类。
先看一段CircuitBreaker 默认接口实现代码
static <T> Supplier<T> decorateSupplier(CircuitBreaker circuitBreaker, Supplier<T> supplier){
return () -> {
//判断是否允许请求通过,不通过,抛出CircuitBreakerOpenException
CircuitBreakerUtils.isCallPermitted(circuitBreaker);
long start = System.nanoTime();
try {
//反射执行业务代码,并返回结果
T returnValue = supplier.get();
long durationInNanos = System.nanoTime() - start;
//请求处理成功,触发熔断器成功处理策略
circuitBreaker.onSuccess(durationInNanos);
return returnValue;
} catch (Exception exception) {
// Do not handle java.lang.Error
long durationInNanos = System.nanoTime() - start;
//请求出现异常,触发熔断器error处理策略
circuitBreaker.onError(durationInNanos, exception);
throw exception;
}
};
}
CircuitBreaker装饰请求默认实现大同小异,熔断大体处理流程见下图: