在spring amqp SimpleMessageListenerContainer中处理异常的最佳策略是什么

时间:2015-10-30 13:33:33

标签: spring-amqp spring-rabbit

我有两个困惑。

1.如果从消息侦听器抛出RuntimeException,SimpleMessageListenrContainer会停止吗? 2.如果SimpleMessageListenerContainer没有停止,那么自动确认的行为是什么?

目前,我希望如果消息监听器处理消息失败,我只记录错误并且不要停止容器,同时通知代理收到消息。

现在我只是捕获了throwable in message listener方法,这是正确的方法吗?

1 个答案:

答案 0 :(得分:5)

不,容器不会停止。

如果侦听器抛出异常,则拒绝该消息(默认情况下将重新排队)。您可以通过将defaultRequeueRejected设置为false(默认情况下为true)来更改默认行为以放弃该消息。或者抛出一个AmqpRejectAndDontRequeueException来指示容器拒绝(而不是重新排队)消息 - 发送ack就像监听器没有抛出任何异常一样。

当邮件被拒绝而没有重新排队时,如果队列是这样配置的,则将其丢弃或发送到死信交换。