Spring Cloud 中的 Circuit Breaker 断路器

在微服务架构中,服务之间调用频繁,如果某个服务出现故障,会导致调用它的服务也受影响,甚至出现雪崩效应。为了解决这个问题,引入了 断路器(Circuit Breaker)模式


一、什么是断路器

断路器类似电路中的开关,它会根据服务调用的状态自动决定:

  • 关闭状态(Closed):正常调用,服务请求直接转发。
  • 打开状态(Open):当某个服务连续失败达到阈值时,断路器会“打开”,阻止后续请求调用目标服务,直接返回错误或降级。
  • 半开状态(Half-Open):经过一定时间后,断路器会允许部分请求通过,如果这些请求成功,断路器关闭,否则继续打开。

断路器的核心目的:快速失败 + 降级处理 + 防止雪崩


二、Spring Cloud 中的 Circuit Breaker

Spring Cloud 对断路器提供了统一接口,并支持多种实现,比如:

  • Resilience4j(推荐,轻量且功能完善)
  • Hystrix(Netflix 出品,但已进入维护模式)
  • Sentinel(阿里开源,适合复杂流控和熔断降级)

Spring Cloud 提供了 spring-cloud-starter-circuitbreakerspring-cloud-starter-circuitbreaker-resilience4j 等 starter 来快速集成。


三、基本使用示例(Resilience4j)

  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
  1. 配置断路器参数application.yml):
resilience4j.circuitbreaker:
  instances:
    myServiceCircuitBreaker:
      registerHealthIndicator: true
      slidingWindowType: COUNT_BASED
      slidingWindowSize: 5
      minimumNumberOfCalls: 3
      permittedNumberOfCallsInHalfOpenState: 2
      waitDurationInOpenState: 5000
      failureRateThreshold: 50
  • slidingWindowSize:统计窗口大小
  • failureRateThreshold:失败率达到阈值就打开断路器
  • waitDurationInOpenState:打开状态保持时间
  • permittedNumberOfCallsInHalfOpenState:半开状态允许的尝试次数






次阅读

扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论