重试策略用尽时,DirectMessageListenerContainer打印堆栈跟踪

时间:2018-10-24 17:28:20

标签: spring-boot rabbitmq spring-rabbit spring-rabbitmq

callExecuteListener(Message message, long deliveryTag)方法内部查看类org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer的源代码,会发生以下情况

  1. executeListener(getChannel(), message);被称为
  2. 如果引发异常,记录器将显示以下消息以及堆栈跟踪logger.error("Failed to invoke listener", e);

由于我的重试策略已用尽,在抛出AmqpRejectAndDontRequeueException情况下,我不需要堆栈跟踪来污染日志,但是我确实希望其他异常的堆栈跟踪。

我看不到一种简单的机制来覆盖此行为。 除了完全关闭DirectMessageListenerContainer的日志记录或编写slf4j过滤器之外,我还有什么选择?我在俯视什么吗?

1 个答案:

答案 0 :(得分:1)

不,您什么都不会错过。我们最近在此添加了此内容:

if (causeChainHasImmediateAcknowledgeAmqpException(e)) {
                if (this.logger.isDebugEnabled()) {
                    this.logger.debug("User requested ack for failed delivery: " + deliveryTag);
                }
                handleAck(deliveryTag, channelLocallyTransacted);
            }

因此,我认为我们也可以改进跳过AmqpRejectAndDontRequeueException的逻辑。

随时可以举起JIRA票。也欢迎捐款!