支援艙壁模式
如果classpath中存在resilience4j-bulkhead,Spring Cloud CircuitBreaker將使用Resilience4j Bulkhead包裝所有方法。您可以透過將spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled設定為false來停用Resilience4j Bulkhead。
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 響應式艙壁示例。