Spring Boot 中的 Resilience4j 与 Circuit Breaker 最简指南
发布: (2025年12月31日 GMT+8 02:25)
3 min read
原文: Dev.to
Source: Dev.to

什么是断路器?
断路器模式的工作方式类似于住宅中的电路断路器。如果检测到故障,它会 打开 电路以防止进一步损害,并在问题解决后 关闭 电路。
断路器有三种主要状态:
- Closed(闭合):一切正常,请求正常流转。
- Open(打开):失败次数已超过阈值,阻止请求并执行回退。
- Half‑Open(半开):一个试运行阶段,允许有限数量的请求以检查服务是否已恢复。
Resilience4j 配置
首先,创建一个 Spring Boot 项目并添加以下依赖:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
</dependency>
在 application.yml 中,定义控制断路器行为的参数:
resilience4j:
circuitbreaker:
instances:
mainService:
registerHealthIndicator: true
slidingWindowSize: 10
permittedNumberOfCallsInHalfOpenState: 3
slidingWindowType: COUNT_BASED
minimumNumberOfCalls: 5
waitDurationInOpenState: 10s
failureRateThreshold: 50
eventConsumerBufferSize: 10
参数说明
- slidingWindowSize:断路器闭合时记录的调用次数。
- failureRateThreshold:当失败率达到该百分比(例如 50%)时,断路器应打开。
- waitDurationInOpenState:断路器保持 打开 状态的时长,之后尝试恢复。
- permittedNumberOfCallsInHalfOpenState:在 半开 状态下成功调用的次数,足以再次关闭断路器。
使用注解实现
使用 Resilience4j 最简便的方式是添加 @CircuitBreaker 注解。指定在 YAML 中配置的实例名称以及回退方法。
注意: 回退方法必须与原方法具有相同的签名,并接受一个
Throwable(或Exception)作为参数。
@Service
public class ProductService {
@CircuitBreaker(name = "mainService", fallbackMethod = "fallbackGetProducts")
public List<Product> getProducts() {
// 可能会失败的逻辑(例如调用外部 API)
return externalApi.fetchProducts();
}
// 回退方法
public List<Product> fallbackGetProducts(Throwable e) {
return List.of(new Product("Default Product", 0.0));
}
}
其他 Resilience4j 模块
除了最为人熟知的断路器,Resilience4j 还提供了其他工具来提升系统的稳定性:
- TimeLimiter – 为请求设置最大执行时间,超时即视为失败。
- Retry – 在放弃之前,自动重试失败的操作,可配置重试次数。
- Bulkhead – 限制对服务的并发调用数量,防止资源(如线程池)被耗尽。
结论
Resilience4j 是构建健壮微服务的强大工具。通过实现断路器模式,你可以确保应用在高压下能够优雅地失败,而不是彻底崩溃。