Resilience4J 熔断器
Resilience4J是我们Spring Cloud G版本 推荐的容错方案,它是一个轻量级的容错库。它借鉴了Hystrix而设计,并且采用JDK8 这个函数式编程,为什么说它是轻量级的呢?因为它的库只使用 Vavr (以前称为 Javaslang ),它没有任何其他外部库依赖项。相比之下, Netflix Hystrix 对Archaius 具有编译依赖性,这导致了更多的外部库依赖,例如 Guava 和 Apache Commons 。而如果使用Resilience4j,你无需引用全部依赖,可以根据自己需要的功能引用相关的模块即可。
简介
Resilience4j 主要有以下功能:
- CircuitBreaker(熔断器)
- RateLimiter(限流)
- Retry(请求重试)
- 限时
- 缓存
- 信号量的隔离
常用熔断器比较
简单使用
熔断器
- pom.xml 添加依赖
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-circuitbreaker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- 创建测试用例测试短路器的功能
@Test
public void testCircuitBreaker() {
// 创建断路器配置
CircuitBreakerConfig config = CircuitBreakerConfig.custom()
//故障率阈值百分比(百分之50),超过这个阈值,断路器就会打开
.failureRateThreshold(50)
//断路器保持打开的时间,在到达设置的时间之后,断路器会进入到 half open 状态
.waitDurationInOpenState(Duration.ofMillis(1000))
//当断路器处于half open 状态时,环形缓冲区的大小
.ringBufferSizeInHalfOpenState(2)//半打开次数
.ringBufferSizeInClosedState(2)//至少要调用两次
.build();
//按以上配置创建断路器实例
CircuitBreakerRegistry r1 = CircuitBreakerRegistry.of(config);
Ci