跳到主要内容
版本:5.0.1

隔板模式支持

DeepSeek V3 中英对照 Bulkhead pattern supporting

如果 resilience4j-bulkhead 在类路径中,Spring Cloud CircuitBreaker 将使用 Resilience4j 舱壁包装所有方法。您可以通过将 spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled 设置为 false 来禁用 Resilience4j 舱壁。

Spring Cloud CircuitBreaker Resilience4j 提供了两种舱壁模式的实现:

  • 一个使用信号量的 SemaphoreBulkhead

  • 一个使用有界队列和固定线程池的 FixedThreadPoolBulkhead。

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

有关舱壁模式实现的更多信息,请参阅 Resilience4j Bulkhead。

Customizer<Resilience4jBulkheadProvider> 可用于提供默认的 Bulkhead 和 ThreadPoolBulkhead 配置。

@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 来支持响应式管道中的舱壁模式。该提供者装饰 Mono 和 Flux 实例,以确保在响应式操作期间应用舱壁约束。

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

配置响应式舱壁​

ReactiveResilience4jBulkheadProvider 可以通过 Customizer bean 进行自定义,如下所示:

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

你也可以为特定用例添加单独的舱壁配置:

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

更多详情,请参阅 Resilience4j Reactive Bulkhead 示例。