支持舱壁模式

如果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.