在callExecuteListener(Message message, long deliveryTag)
方法内部查看类org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer的源代码,会发生以下情况
executeListener(getChannel(), message);
被称为logger.error("Failed to invoke listener", e);
由于我的重试策略已用尽,在抛出AmqpRejectAndDontRequeueException情况下,我不需要堆栈跟踪来污染日志,但是我确实希望其他异常的堆栈跟踪。
我看不到一种简单的机制来覆盖此行为。 除了完全关闭DirectMessageListenerContainer的日志记录或编写slf4j过滤器之外,我还有什么选择?我在俯视什么吗?
答案 0 :(得分:1)
不,您什么都不会错过。我们最近在此添加了此内容:
if (causeChainHasImmediateAcknowledgeAmqpException(e)) {
if (this.logger.isDebugEnabled()) {
this.logger.debug("User requested ack for failed delivery: " + deliveryTag);
}
handleAck(deliveryTag, channelLocallyTransacted);
}
因此,我认为我们也可以改进跳过AmqpRejectAndDontRequeueException
的逻辑。
随时可以举起JIRA票。也欢迎捐款!