在Spring Cloud中使用CircuitBreaker实现熔断器

在微服务架构中,服务之间的依赖调用非常频繁。当一个下游服务因高负载或故障导致响应变慢或不可用时,可能会引发上游服务的级联故障,最终导致整个系统崩溃。熔断器(Circuit Breaker) 是解决这类问题的关键模式之一。Spring Cloud提供了对熔断器的支持,本文将详细介绍如何集成和使用它。

熔断器模式简介

熔断器模式的核心思想是监控服务调用的状态。当失败率超过阈值时,熔断器会进入“打开”状态,后续的调用直接返回预设的降级结果,避免资源耗尽。经过一段时间后,熔断器会尝试进入“半开”状态,允许部分请求通过以检测下游服务是否恢复。


Spring Cloud CircuitBreaker

Spring Cloud提供了spring-cloud-starter-circuitbreaker抽象层,支持多种实现(如Resilience4j、Sentinel)。以下以Resilience4j为例。


步骤1:添加依赖

pom.xml中引入依赖:

<!-- Spring Cloud Circuit Breaker Starter -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>

<!-- Actuator(可选,用于监控) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

步骤2:配置熔断器参数

application.yml中配置Resilience4j:

resilience4j:
  circuitbreaker:
    configs:
      default:
        failureRateThreshold: 50     # 触发熔断的失败率阈值(%)
        minimumNumberOfCalls: 5       # 计算失败率的最小调用次数
        slidingWindowType: COUNT_BASED # 滑动窗口类型(基于调用次数)
        slidingWindowSize: 10         # 滑动窗口大小
        waitDurationInOpenState: 5s   # 熔断器打开后的等待时间
        permittedNumberOfCallsInHalfOpenState: 3 # 半开状态允许的调用次数
        automaticTransitionFromOpenToHalfOpenEnabled: true # 自动切换到半开状态

步骤3:使用@CircuitBreaker注解

在需要熔断的方法上添加注解,并指定降级方法:

import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;

@Service
public class UserService {

    @Autowired
    private CircuitBreakerFactory circuitBreakerFactory;

    public String getUserInfo(String userId) {
        return circuitBreakerFactory.create("userServiceCircuitBreaker")
            .run(
                () -> {
                    // 实际业务逻辑,如远程调用
                    return remoteService.getUser(userId);
                },
                throwable -> {
                    // 降级处理
                    return "Fallback User Info";
                }
            );
    }
}

步骤4:定义Fallback方法







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


扫码关注

评论