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

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

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

摘要: 原创出处 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(熔断器)