代码之家  ›  专栏  ›  技术社区  ›  Johan

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

  •  1
  • Johan  · 技术社区  · 7 年前

    我有一个 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 引发异常没有记录此异常。虽然该方法已重试,但我希望在下次重试之前查看stacktrace的日志。我怎样才能做到这一点?

    请注意,我使用的不是Spring Boot,而是vanilla Spring 4。x(如果这有什么区别的话)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Artem Bilan    7 年前

    不,你真的不需要Spring Boot来解决这个问题。您可以看到该选项被调用 setAdviceChain() 。因此,您确实可以实现一个 MethodInterceptor 并在重试后将其添加到链中。在这个建议中,您可以在 invocation.proceed() ,将其记录并重试,以让重试建议执行其逻辑。