我有两个困惑。
1.如果从消息侦听器抛出RuntimeException,SimpleMessageListenrContainer会停止吗? 2.如果SimpleMessageListenerContainer没有停止,那么自动确认的行为是什么?
目前,我希望如果消息监听器处理消息失败,我只记录错误并且不要停止容器,同时通知代理收到消息。
现在我只是捕获了throwable in message listener方法,这是正确的方法吗?
答案 0 :(得分:5)
不,容器不会停止。
如果侦听器抛出异常,则拒绝该消息(默认情况下将重新排队)。您可以通过将defaultRequeueRejected
设置为false(默认情况下为true)来更改默认行为以放弃该消息。或者抛出一个AmqpRejectAndDontRequeueException
来指示容器拒绝(而不是重新排队)消息 - 发送ack就像监听器没有抛出任何异常一样。
当邮件被拒绝而没有重新排队时,如果队列是这样配置的,则将其丢弃或发送到死信交换。