如何在RabbitMQ / AMQP中设置重新传递策略

时间:2013-04-02 14:58:56

标签: rabbitmq activemq amqp

我目前正在为我的排队系统使用ActiveMQ,我想要转换到RabbitMQ。我一直在使用的一个属于ActiveMQ的功能是一个重新传递策略,因为有时我们的消费者拒绝一条消息,因为它此时无法处理它,但可能想稍后再试,所以它重新排列它。

现在在AMQP中,当我拒绝一条消息时,它会立即再次从队列中撤出并再次尝试。

在RabbitMQ中,有没有办法为队列,消费者或消息指定重新传递策略?

1 个答案:

答案 0 :(得分:1)

我也遇到过这种行为的问题。根据文档(据我记得,可能在更新的版本中有些东西发生了变化),在重新排队之后,没有说明将放置消息的位置(它被描述为未确定)。在我的测试用例(版本2.8.2)中,一些消息被放到队列的末尾,一条消息(恰好首先来自客户端预取)落在开始(并立即被消耗)。在我们的应用中,这导致了活锁。

你可以通过将消息副本发布到队列并且已经在一个事务中执行acking(但我建议仔细阅读有关文档中事务的部分)或使用deadlettering处理临时不可处理的消息来解决这个问题。