我使用spring boot和spring-amqp以及基于注解的监听器来使用rabbitmq代理的消息。我有一个spring组件,它包含如下方法:
@RabbitListener(queues = "tasks")
public void receiveMessage(@Payload Task task) {...}在成功执行receiveMessage(...)之后,我使用AUTO模式来确认消息。如果我检测到一个特殊的错误,我会抛出AmqpRejectAndDontRequeueException把这个消息放到一个配置好的死信队列中。现在,我只需要nack一条消息,这样消息就会重新排队到rabbitmq的主队列中,并且另一个使用者有可能再次处理该消息。
我应该抛出哪个异常呢?我不想使用channel.basicNack(...)如果可能的话,就像这里描述的(http://docs.spring.io/spring-integration/reference/html/amqp.html)。
发布于 2016-08-30 03:36:07
只要容器工厂中的defaultRequeueRejected为true (默认值),抛出AmqpRejectAndDontRequeueException以外的任何异常都会导致消息被拒绝并重新排队。
异常的原因链中不能有AmqpRejectAndDontRequeueException (容器遍历原因以确保不存在此类异常)。
https://stackoverflow.com/questions/39212542
复制相似问题