我们在我们的应用程序中使用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();
}
所以重试工作完美无缺,但我无法找到一个钩子来实际记录重试的任何内容。有什么我想念的吗?那里有一个钩子可以在重试时执行某些操作吗?我可以继承的东西?或者是否有一些exsting日志记录埋在Spring的重试逻辑中,我可以在我的logger配置中启用它?
感谢。
克里斯。
答案 0 :(得分:3)
您可以为org.springframework.retry.support.RetryTemplate
类别打开DEBUG级别,您会在日志中看到类似的内容:
2014-10-09 20:18:51,126 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Retry: count=0>
2014-10-09 20:18:51,140 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Checking for rethrow: count=1>
2014-10-09 20:18:51,140 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Retry: count=1>
2014-10-09 20:18:51,141 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Checking for rethrow: count=2>
2014-10-09 20:18:51,141 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Retry: count=2>
2014-10-09 20:18:51,141 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Checking for rethrow: count=3>
2014-10-09 20:18:51,141 DEBUG main [org.springframework.retry.support.RetryTemplate] - <Retry failed last attempt: count=3>