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

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


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

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

1. 熔断器模块总结

通过前面几篇文章分析了熔断器模块的6个主要组成部分,这篇文章我们来分析这6个部分是如何协同工作的。

1.1 熔断器初始化时的状态:

一般创建熔断器的代码:

img

这2行代码产生了一系列的调用关系,如图:

img

这时熔断器的状态是关闭状态(ClosedState),度量指标实例及事件处理器实例都已经准备好。我们这时可以用CircuitBreaker.Metrics metrics = circuitBreaker.getMetrics();这行代码实时的获取度量指标值。

1.2 熔断器状态转换

在这里,我们只分析熔断器从关闭状态转换到打开状态,其他状态之间的转换过程是一样的。

ClosedState ==> OpenState 状态的转换过程,如图:

img

熔断器通过decorateSupplier方法装饰请求调用的方法,如:

CircuitBreaker.decorateSupplier(circuitBreaker,helloWorldService::returnHelloWorld);

会发生如图所示的调用过程:

1)熔断器判断当前状态是否允许请求调用,关闭状态始终返回true。

2)执行请求调用方法

3)请求调用的结果成功或失败,熔断器最终会调用度量指标CircuitBreakerMetrics的onSuccess或onError方法返回请求调用失败率到ClosedState。ClosedState会在它的onSuccess或onError方法中判断请求失败率是否达到了设置的阈值,如果达到了阈值则调用状态机CircuitBreakerStateMachine的transitionToOpenState方法生成OpenState对象,同时把关闭状态的度量指标对象传给打开状态。然后熔断器把当前持有的状态更改为打开状态,完成了状态转换。

Resilience4j的熔断器模块的源码分析告一段落,接下来的系列文章会分析Resilience4j的限流器模块。

文章目录
  1. 1. 1. 熔断器模块总结
    1. 1.1. 1.1 熔断器初始化时的状态:
    2. 1.2. 1.2 熔断器状态转换