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

Gra*_*aBa 2 spring-rabbit spring-amqp

我有两个困惑.

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

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

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

Gar*_*ell 6

不,容器不会停止.

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

如果在没有重新排队的情况下拒绝邮件,则将其丢弃或发送到死信交换,如果队列是这样配置的.