《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》

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


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

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

6. CircuitBreaker(熔断器)

通过前面几篇的讲解,现在终于可以来看一看熔断功能是如何实现的了。与熔断器相关的有CircuitBreaker接口和CircuitBreakerStateMachine实现类。

img

在CircuitBreaker中:

1)声明了与状态相关的枚举类State和与状态转换相关的枚举类StateTransition:

img

img

有限状态机的5种状态及状态的转换在文章《Resilience4j源码解析-2.3.1 CircuitBreaker模块之有限状态机》中有讲解。

2)声明了度量指标接口Metrics:

img

度量指标及存储方式在文章《Resilience4j源码解析-2.4 CircuitBreaker模块之度量指标》中有讲解。

3)声明了事件处理器接口EventPublisher接口:

img

事件发布及处理机制在文章《Resilience4j源码解析-2.5 CircuitBreaker模块之事件发布》中有讲解。

4)熔断功能

在CircuitBreaker接口中以线程安全的单例模式生成了CircuitBreakerStateMachine的实例,有三种实现方式:

img

熔断方法

三个default方法:

img

其他是static方法:

img

这些装饰方法逻辑基本一样,我们来看看其中常用的decorateSupplier(…)方法。

img

CircuitBreakerUtils.isCallPermitted(circuitBreaker)最终调用了CircuitBreakerStateMachine实现类中的isCallPermitted()方法,circuitBreaker.onSuccess(…)和circuitBreaker.onError(…)也分别调用了CircuitBreakerStateMachine实现类中的onSuccess(…)和onError(…)方法,

注释如下:

img

至此,Resilience4j熔断器模块CircuitBreaker的六个组成部分全部分析完了,

下一篇文章《Resilience4j源码解析-2.7 CircuitBreaker模块之总结》主要分析六个组成部分是如何有效的协同工作来达到熔断的目的。

文章目录
  1. 1. 6. CircuitBreaker(熔断器)