アプリケーションでRabbitMQを使用して支払いリクエストをキューに入れ、呼び出し元に結果を返す別のキューを用意しています。どちらの場合も、クライアントは永久に再試行する再試行ポリシーを要求しましたが、外部システムが監視によってバックアップを検出できるように、「x 回目のトランザクションを再試行しています...」のような内容を再試行のたびにログに記録します。ログファイル。
私はこのようにリスナーコンテナを作成しています:
public SimpleMessageListenerContainer paymentListenerContainer() {
final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueues(paymentQueue());
container.setMessageListener(cpmPaymentListener());
container.setConcurrentConsumers(configurationService.getAmqpConcurrentConsumers());
container.setMaxConcurrentConsumers(configurationService.getAmqpMaxConcurrentConsumers());
container.setAdviceChain(new Advice[] { paymentRetryInterceptor() });
return container;
}
再試行ロジックを次のように定義します。
public RetryOperationsInterceptor paymentRetryInterceptor() {
return RetryInterceptorBuilder.stateless()
.maxAttempts(configurationService.getPaymentRetryMaxAttempts())
.backOffOptions(configurationService.getPaymentRetryInitialInterval(), configurationService.getPaymentRetryMultiplier(), configurationService.getPaymentRetryMaxInterval()) // initialInterval, multiplier, maxInterval
.build();
}
したがって、再試行は問題なく機能しますが、実際に再試行で何かをログに記録するためのフックが見つかりません。足りないものはありますか?再試行時に何かを実行するためのフックがどこかにありますか? サブクラス化できるものはありますか?または、Spring の再試行ロジック内に埋もれている既存のログがあり、ロガー構成で有効にすることができますか?
ありがとう。
クリス。