CircuitBreakerState
熔断状态抽象类,内置熔断状态有限机CircuitBreakerStateMachine 来进行熔断状态转换。
//通过stateMachine进行熔断状态转换
CircuitBreakerStateMachine stateMachine;
//判断是否允许请求被通过
abstract boolean isCallPermitted();
//请求出现异常处理策略,更新熔断指标,并判断是否要转换熔断状态
abstract void onError(Throwable throwable);
//请求成功处理策略,更新熔断指标,并判断是否要转换熔断状态
abstract void onSuccess();
//返回当前熔断状态
abstract CircuitBreaker.State getState();
//返回当前熔断度量指标
abstract CircuitBreakerMetrics getMetrics();
//根据熔断状态枚举配置或熔断事件枚举配置判断是否需要发布熔断事件
boolean shouldPublishEvents(CircuitBreakerEvent event){
return event.getEventType().forcePublish || getState().allowPublish;
}
CircuitBreakerState子类有如下几种,每个子类都有不同的接口实现:
ClosedState
熔断关闭状态,其有以下两个成员变量
- CircuitBreakerMetrics circuitBreakerMetrics;(熔断度量指标)
- float failureRateThreshold;(失败率阀值,超过熔断器会转换到开启状态)
以下源码中stateMachine.transitionToXXXXState();前面章节已讲解,这里不在叙述。
isCallPermitted
熔断器当处于关闭状态时,允许所有请求通过
boolean isCallPermitted() {
return true;
}
onError
void onError(Throwable throwable) {
// CircuitBreakerMetrics is thread-safe
//失败次数+1,并返回当前失败率,判断是否达到阀值
checkFailureRate(circuitBreakerMetrics.onError());
}
private void checkFailureRate(float currentFailureRate) {
if (currentFailureRate >= failureRateThreshold) {