使用amqp在spring-boot中使用基于注释的侦听器NACK消息的正确异常类型是什么?

时间:2016-08-29 18:11:23

标签: spring-boot spring-amqp spring-rabbit spring-rabbitmq

我使用带有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)。

1 个答案:

答案 0 :(得分:1)

只要容器工厂中defaultRequeueRejectedtrue(默认值),抛出AmqpRejectAndDontRequeueException以外的任何异常都会导致邮件被拒绝并重新排队。

异常在其原因链中不得有AmqpRejectAndDontRequeueException(容器遍历原因以确保没有此类异常)。