Resilience4j源码解析-2.6 CircuitBreaker模块之熔断

6,CircuitBreaker(熔断器)

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

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第1张图片

 

在CircuitBreaker中:

 

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

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第2张图片

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第3张图片

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

 

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

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第4张图片

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

 

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

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

 

4)熔断功能

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

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第5张图片

 

熔断方法

三个default方法:

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第6张图片

 

其他是static方法:

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第7张图片

 

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

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第8张图片

 

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

注释如下:

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第9张图片

 

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

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

 

源码的中文注释地址:

https://github.com/Justin02180218/resilience4j


==大家可以关注我的微信公众号,后续文章将在公众号中同步更新== 

Resilience4j源码解析-2.6 CircuitBreaker模块之熔断_第10张图片

 

你可能感兴趣的:(微服务,微服务,熔断,resilience4j)