在重试兔子消息时记录消息

时间:2014-10-09 16:42:00

标签: logging rabbitmq spring-amqp spring-retry

我们在我们的应用程序中使用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配置中启用它?

感谢。

克里斯。

1 个答案:

答案 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>