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

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


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

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

1. CircuitBreakerConfig(熔断器配置)

CircuitBreakerConfig类中封装了与熔断器相关的配置属性,属性包括:请求调用失败的阈值、熔断器在打开状态时的持续时间、熔断器在半开状态下的Ring Buffer大小、熔断器在关闭状态下的Ring Buffer大小、是否记录请求调用失败的断言。Ring Buffer的原理在后面研究CircuitBreakerMetrics部分时再详细讲解,现在只需要了解,它是一个存储每次请求调用成功与否的环形缓存区。

img

另外CircuitBreakerConfig类通过Builder模式构造CircuitBreakerConfig实例及流式的设置配置属性值。

需主要关注的源码如下:

// 请求调用失败的阈值,百分比。默认是50%
DEFAULT_MAX_FAILURE_THRESHOLD = 50; // Percentage

// 熔断器在打开状态时的持续时间。默认是60秒
DEFAULT_WAIT_DURATION_IN_OPEN_STATE = 60; // Seconds

// 熔断器在半开状态下的ring buffer大小。默认10
DEFAULT_RING_BUFFER_SIZE_IN_HALF_OPEN_STATE = 10;

// 熔断器在关闭状态下的ring buffer大小。默认100
DEFAULT_RING_BUFFER_SIZE_IN_CLOSED_STATE = 100;

// 是否记录请求调用失败的断言,默认所有异常都记录。
DEFAULT_RECORD_FAILURE_PREDICATE = (throwable) -> true;

/**
* 构造者模式
*/
public static class Builder {

**......**

// 请求调用失败,存储异常记录的集合
private Class<? extends Throwable>[] recordExceptions = new Class[0];

// 请求调用失败,忽略异常记录的集合
private Class<? extends Throwable>[] ignoreExceptions = new Class[0];

**......**

/**
* 异常记录集合与异常忽略集合取交集,如果有值则为false,否则为true。
*/
private void buildErrorRecordingPredicate() {
this.errorRecordingPredicate =
​ getRecordingPredicate()
​ .and(buildIgnoreExceptionsPredicate()
​ .orElse(DEFAULT_RECORD_FAILURE_PREDICATE));
}

**......**

}

下一篇文章《Resilience4j源码解析-2.3 CircuitBreaker模块之有限状态机》讲解熔断器的核心理念-有限状态机,及状态转换。

文章目录
  1. 1. 1. CircuitBreakerConfig(熔断器配置)