特定のサーキットブレーカーの構成

デフォルト構成を提供するのと同様に、Customizer Bean を作成できます。これには、Resilience4JCircuitBreakerFactory または ReactiveResilience4JCircuitBreakerFactory が渡されます。

@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 サーキットブレーカーにイベントハンドラーを追加する場合に役立ちます。

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

セキュリティコンテキストをサーキットブレーカーに伝播する必要がある場合は、DelegatingSecurityContextExecutorService を使用するようにサーキットブレーカーを構成する必要があります。

@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");
     };
}