该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 Spring-Cloud-CircuitBreaker 5.0.0spring-doc.cadn.net.cn

隔板模式支撑

如果resilience4j-bulkhead在类路径上,Spring Cloud CircuitBreaker 会用 Resilience4j Bulkhead 包裹所有方法。 你可以通过设置禁用Resilience4j隔板spring.cloud.circuitbreaker.bulkhead.resilience4j.enabledfalse.spring-doc.cadn.net.cn

Spring Cloud CircuitBreaker Resilience4j 提供了两种隔板模式实现:spring-doc.cadn.net.cn

默认情况下,Spring Cloud CircuitBreaker Resilience4j 使用固定线程池块头.修改默认行为以使用信号臂船头设置属性spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkheadtrue.spring-doc.cadn.net.cn

关于实施的更多信息 隔板模式的部分见韧性4j隔板spring-doc.cadn.net.cn

Customizer<Resilience4jBulkheadProvider>可以用来提供默认值舱 壁ThreadPoolBulkhead配置。spring-doc.cadn.net.cn

@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以支持响应式管道中的隔舱模式。 该提供商负责装饰通量实例以确保在反应作期间应用隔板约束。spring-doc.cadn.net.cn

Spring Cloud CircuitBreaker Resilience4j 响应式支持仅使用信号臂船头. 如果财产spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead设置为false,会记录警告,并且ReactiveResilience4jBulkheadProvider仍将使用信号臂船头.spring-doc.cadn.net.cn

配置反应挡板

ReactiveResilience4jBulkheadProvider可以通过以下方式进行定制定制器豆子,如下所示:spring-doc.cadn.net.cn

@Bean
public Customizer<ReactiveResilience4jBulkheadProvider> reactiveBulkheadCustomizer() {
    return provider -> provider.configureDefault(id -> new Resilience4jBulkheadConfigurationBuilder()
        .bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(4).build())
        .build());
}

您还可以根据特定用例添加单独的隔板配置:spring-doc.cadn.net.cn

@Bean
public Customizer<ReactiveResilience4jBulkheadProvider> reactiveSpecificBulkheadCustomizer() {
    return provider -> provider.configure(builder -> {
        builder.bulkheadConfig(BulkheadConfig.custom()
            .maxConcurrentCalls(2)
            .build());
    }, "serviceBulkhead");
}