我的场景:我向Rabbit代理发布了两条消息,处理第一条消息时发生了未处理的异常。
我的问题:为什么邮件在代理中仍然是Unack,因此为什么第二条消息不会出列并处理?
有些信息: 我在Spring Integration 4.2.4中使用Spring AMQP 1.5.4。 (见下面的代码) 我有一个Dead Letter Exchange设置,它正在按预期工作(即当我Nack一条消息时,它被转发到它到期的DLX。然后转发到主Exchange。)
我想要的是什么:
我希望未处理的异常(即SimpleMessageListenerContainer
捕获的异常)导致amqp消息为Nack而不是保留Unack' d。
我看到的内容:
由于我的强制异常,有3次重试尝试处理消息当然失败(参见下面ErrorHandler
中的代码)。
consumer tag
的{{1}}是相同的,所以我猜测BlockingQueueConsumer没有重新启动。但是,下面的日志显示它确实会继续等待消息。
我想知道为什么BlockingQueueConsumer不会消息消息以及为什么不消耗后续消息,尽管消息正在等待消息的日志中有证据。
非常欢迎任何建议或背景信息!
BlockingQueueConsumer
答案 0 :(得分:1)
retVal.setAcknowledgeMode(AcknowledgeMode.MANUAL);
使用手动确认,您有责任确认或拒绝该消息;如果将模式设置为AUTO,容器将只有ack / nack;然后它将完全按照您的要求完成。