对于最新的稳定版本,请使用 Spring-Cloud-CircuitBreaker 3.3.0spring-doc.cadn.net.cn

特定断路器配置

与提供默认配置类似,您可以创建一个Customizerbean 这被传递了一个Resilience4JCircuitBreakerFactoryReactiveResilience4JCircuitBreakerFactory.spring-doc.cadn.net.cn

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() {
	return factory -> factory.configure(builder -> builder.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
			.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build()), "slow");
}

除了配置创建的断路器外,您还可以在创建断路器后、在将断路器返回给调用方之前自定义断路器。为此,您可以使用addCircuitBreakerCustomizer方法。 这对于将事件处理程序添加到 Resilience4J 断路器非常有用。spring-doc.cadn.net.cn

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() {
	return factory -> factory.addCircuitBreakerCustomizer(circuitBreaker -> circuitBreaker.getEventPublisher()
	.onError(normalFluxErrorConsumer).onSuccess(normalFluxSuccessConsumer), "normalflux");
}

如果需要将安全上下文传播到断路器,则必须将断路器配置为使用DelegatingSecurityContextExecutorService.spring-doc.cadn.net.cn

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> groupExecutorServiceCustomizer() {
	return factory -> factory.configureGroupExecutorService(group -> new DelegatingSecurityContextExecutorService(Executors.newVirtualThreadPerTaskExecutor()));
}

响应式示例

@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> slowCustomizer() {
	return factory -> {
		factory.configure(builder -> builder
		.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build())
		.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()), "slow", "slowflux");
		factory.addCircuitBreakerCustomizer(circuitBreaker -> circuitBreaker.getEventPublisher()
        	.onError(normalFluxErrorConsumer).onSuccess(normalFluxSuccessConsumer), "normalflux");
     };
}