バルクヘッドパターン対応
resilience4j-bulkhead
がクラスパス上にある場合、Spring Cloud CircuitBreaker はすべてのメソッドを Resilience4j Bulkhead でラップします。spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled
を false
に設定することで、Resilience4j Bulkhead を無効にできます。
Spring Cloud CircuitBreaker Resilience4j は、バルクヘッドパターンの 2 つの実装を提供します。
セマフォを使用する
SemaphoreBulkhead
制限付きキューと固定スレッドプールを使用する
FixedThreadPoolBulkhead
。
デフォルトでは、Spring Cloud CircuitBreaker Resilience4j は FixedThreadPoolBulkhead
を使用します。SemaphoreBulkhead
を使用するようにデフォルトの動作を変更するには、プロパティ spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead
を true
に設定します。
バルクヘッドパターンの実装の詳細については、Resilience4j バルクヘッド (英語) を参照してください。
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 リアクティブバルクヘッドの例 (英語) を参照してください。