バルクヘッドパターン対応

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()
);
}