扫码关注公众号:芋道源码

发送: 百事可乐
获取永久解锁本站全部文章的链接

《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 https://mp.weixin.qq.com/s/n80_vS3eoW3H4-YEA5rFig 「coding到灯火阑珊」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 有限状态机的实现

状态建模完成,还需要建模一个状态机来驱动状态的变化,把状态机封装成类CircuitBreakerStateMachine。

如图:

img

CircuitBreakerStateMachine类实现了熔断器CircuitBreaker接口,除了实现状态转换机制,还实现了熔断机制和事件发布机制。

所以CircuitBreakerStateMachine类是整个熔断器模块的核心类,在这篇文章中我们只研究状态转换机制,在后续的文章中我们逐步讲解熔断机制和事件发布机制。

下面我们看一下CircuitBreaker接口和CircuitBreakerStateMachine实现类中与状态相关的属性和方法:

1,在CircuitBreaker接口中声明了状态的枚举类,主要是为了方便进行判等操作,同时也设置了每种状态是否允许发布事件

img

2,CircuitBreakerStateMachine实现类中,用AtomicReference保证对CircuitBreakerState引用的原子性,在构造方法中初始化状态机为关闭状态。

// 用AtomicReference保证对CircuitBreakerState引用的原子性
private final AtomicReference<CircuitBreakerState> stateReference;

构造方法:

img

状态转换系列方法:

img

/**
* 转换到不可用状态
*/
@Override
public void transitionToDisabledState() {
stateTransition(DISABLED, currentState -> new DisabledState(this));
}

/**
* 转换到强制打开状态
*/
@Override
public void transitionToForcedOpenState() {
stateTransition(FORCED_OPEN, currentState -> new ForcedOpenState(this));
}

/**
* 转换到关闭状态
*/
@Override
public void transitionToClosedState() {
stateTransition(CLOSED, currentState -> new ClosedState(this,currentState.getMetrics()));
}

/**
* 转换到打开状态
*/
@Override
public void transitionToOpenState() {
stateTransition(OPEN, currentState -> new OpenState(this,currentState.getMetrics()));
}

/**
* 转换到半开状态
*/
@Override
public void transitionToHalfOpenState() {
stateTransition(HALF_OPEN, currentState -> new HalfOpenState(this));
}

这些状态转换方法是由各状态类实例来调用的,具体可以参考上一篇文章《Resilience4j源码解析-2.3.1 CircuitBreaker模块之有限状态机》

下一篇文章《Resilience4j源码解析-2.4 CircuitBreaker模块之度量指标》讲解熔断器触发状态转换的度量指标。

文章目录
  1. 1. 1. 有限状态机的实现