我使用带有spring-amqp和基于注释的侦听器的spring boot来使用来自rabbitmq代理的消息。 我是一个包含这样一个方法的弹簧组件:
@RabbitListener(queues = "tasks")
public void receiveMessage(@Payload Task task) {...}
我成功执行receiveMessage(...)后使用AUTO模式确认消息。如果我检测到特殊错误,我会抛出AmqpRejectAndDontRequeueException以将此消息传入已配置的死信队列。现在我只需要输入一条消息,这样消息就会被重新排入rabbitmq的主队列中,而另一个消费者可以再次处理该消息。
我应该为此抛出哪个例外?如果可能的话,我不想像这里描述的那样使用channel.basicNack(...)(http://docs.spring.io/spring-integration/reference/html/amqp.html)。
答案 0 :(得分:1)
只要容器工厂中defaultRequeueRejected
为true
(默认值),抛出AmqpRejectAndDontRequeueException
以外的任何异常都会导致邮件被拒绝并重新排队。
异常在其原因链中不得有AmqpRejectAndDontRequeueException
(容器遍历原因以确保没有此类异常)。