Spring Retry サーキットブレーカーの構成

Spring Retry は、Spring アプリケーションの宣言型再試行サポートを提供します。プロジェクトのサブセットには、サーキットブレーカー機能を実装する機能が含まれています。Spring Retry は、CircuitBreakerRetryPolicy (英語) とステートフルリトライの組み合わせにより、サーキットブレーカーの実装を提供します。Spring Retry を使用して作成されたすべてのサーキットブレーカーは、CircuitBreakerRetryPolicy と DefaultRetryState [GitHub] (英語) を使用して作成されます。これらのクラスは両方とも、SpringRetryConfigBuilder を使用して構成できます。

デフォルト構成

すべてのサーキットブレーカーにデフォルト構成を提供するには、SpringRetryCircuitBreakerFactory が渡される Customizer Bean を作成します。configureDefault メソッドを使用して、デフォルト構成を提供できます。

@Bean
public Customizer<SpringRetryCircuitBreakerFactory> defaultCustomizer() {
	return factory -> factory.configureDefault(id -> new SpringRetryConfigBuilder(id)
    	.retryPolicy(new TimeoutRetryPolicy()).build());
}

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

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

@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
	return factory -> factory.configure(builder -> builder.retryPolicy(new SimpleRetryPolicy(1)).build(), "slow");
}

作成されたサーキットブレーカーの設定に加えて、作成された後、発信者に返される前にサーキットブレーカーをカスタマイズすることもできます。これを行うには、addRetryTemplateCustomizers メソッドを使用できます。これは、RetryTemplate にイベントハンドラーを追加する場合に役立ちます。

@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
	return factory -> factory.addRetryTemplateCustomizers(retryTemplate -> retryTemplate.registerListener(new RetryListener() {

		@Override
		public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
			return false;
		}

		@Override
		public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {

		}

		@Override
		public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {

		}
	}));
}