Мы используем 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, которую я могу просто включить в моей конфигурации регистратора?
Спасибо.
Крис.