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

摘要: 原创出处 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 熔断器状态转换