支援艙壁模式

如果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>可用於提供預設的BulkheadThreadPoolBulkhead配置。

@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在響應式管道中支援艙壁模式。此提供程式裝飾MonoFlux例項,以確保在響應式操作期間應用艙壁限制。

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 響應式艙壁示例

© . This site is unofficial and not affiliated with VMware.