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

What is the best strategy to handle exception in spring amqp SimpleMessageListenerContainer

我有两个困惑。

1.If 消息侦听器抛出RuntimeException,SimpleMessageListenrContainer 是否停止? 2.If SimpleMessageListenerContainer 没有停止,关于自动确认的行为是什么?

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

现在我只是在消息监听器方法中捕获throwable,这样对吗?

不,容器不会停止。

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

当一条消息被拒绝而不重新排队时,它要么被丢弃,要么被发送到死信交换,如果队列是这样配置的。