如何在SimpleRabbitListenerContainerFactory中使用RetryInterceptorBuilder重试时启用异常日志记录?

时间:2018-03-06 10:50:55

标签: spring spring-amqp spring-rabbitmq

我的SimpleRabbitListenerContainerFactory定义如下:

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setMessageConverter(rabbitMQEventMessageConverter());
    factory.setRecoveryBackOff(new ExponentialBackOff());
    factory.setConcurrentConsumers(3);
    factory.setMaxConcurrentConsumers(10);
    factory.setAdviceChain(RetryInterceptorBuilder
            .stateless()
            .maxAttempts(Integer.MAX_VALUE)
            .backOffOptions(1000, 2, 5000)
            .build());
    return factory;
}

问题是,如果使用@RabbitListner注释的方法抛出异常,则不会记录此异常。虽然重试了该方法,但我希望在下次重试之前看到堆栈跟踪。我怎样才能做到这一点?

请注意,我没有使用Spring Boot,而是使用了Spring 4.x(如果这有任何区别)。

1 个答案:

答案 0 :(得分:1)

不,你真的不需要Spring Boot来解决这个问题。您会看到该选项名为setAdviceChain()。所以,你真的可以实现一个简单的MethodInterceptor并在重试后将它添加到链中。在这个建议中,你可以在invocation.proceed()上捕获异常,记录它并重新抛出,让重试建议来做它的逻辑。