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

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

《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(熔断器配置)