此版本仍在开发中,目前尚不被视为稳定版本。如需最新稳定版本,请使用 Spring-Cloud-CircuitBreaker 5.0.1spring-doc.cadn.net.cn

熔断模式支持

如果 resilience4j-bulkhead 在类路径中,Spring Cloud CircuitBreaker 将为所有方法添加 Resilience4j 限流器(Bulkhead)封装。您可以通过将 spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled 设置为 false 来禁用 Resilience4j 限流器(Bulkhead)。spring-doc.cadn.net.cn

Spring Cloud CircuitBreaker Resilience4j 提供了熔断模式的两种实现:spring-doc.cadn.net.cn

默认情况下,Spring Cloud CircuitBreaker Resilience4j 使用 FixedThreadPoolBulkhead。若要将默认行为修改为使用 SemaphoreBulkhead,请将属性 spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead 设置为 truespring-doc.cadn.net.cn

有关批量隔离模式实现的更多信息,请参阅 Resilience4j 批量隔离spring-doc.cadn.net.cn

代码 Customizer<Resilience4jBulkheadProvider> 可用于提供默认的 BulkheadThreadPoolBulkhead 配置。spring-doc.cadn.net.cn

@Bean
public Customizer<Resilience4jBulkheadProvider> defaultBulkheadCustomizer() {
    return provider -> provider.configureDefault(id -> new Resilience4jBulkheadConfigurationBuilder()
        .bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(4).build())
        .threadPoolBulkheadConfig(ThreadPoolBulkheadConfig.custom().coreThreadPoolSize(1).maxThreadPoolSize(1).build())
        .build()
);
}

响应式熔断器模式支持

如果您正在使用 Spring Cloud CircuitBreaker 进行响应式编程,可以利用 ReactiveResilience4jBulkheadProvider 在响应式管道中支持舱壁(Bulkhead)模式。此提供者会装饰 MonoFlux 实例,以确保在响应式操作期间应用舱壁约束。spring-doc.cadn.net.cn

Spring Cloud CircuitBreaker Resilience4j 的响应式支持仅使用 SemaphoreBulkhead。如果属性 spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead 设置为 false,将记录一条警告,但 ReactiveResilience4jBulkheadProvider 仍会使用 SemaphoreBulkheadspring-doc.cadn.net.cn

配置响应式限流器

The ReactiveResilience4jBulkheadProvider 可以通过 Customizer Bean 进行自定义,如下所示:spring-doc.cadn.net.cn

@Bean
public Customizer<ReactiveResilience4jBulkheadProvider> reactiveBulkheadCustomizer() {
    return provider -> provider.configureDefault(id -> new Resilience4jBulkheadConfigurationBuilder()
        .bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(4).build())
        .build());
}

您还可以为特定用例添加单独的舱壁配置:spring-doc.cadn.net.cn

@Bean
public Customizer<ReactiveResilience4jBulkheadProvider> reactiveSpecificBulkheadCustomizer() {
    return provider -> provider.configure(builder -> {
        builder.bulkheadConfig(BulkheadConfig.custom()
            .maxConcurrentCalls(2)
            .build());
    }, "serviceBulkhead");
}