1

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

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

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

4

1 回答 1

1

我也有这种行为的问题。根据文档(据我记得,可能在较新的版本中有所改变),在重新排队后没有说明消息将放置在哪里(它被描述为未确定)。在我的测试用例(版本 2.8.2)中,一些消息被放在队列的末尾,而一条消息(恰好首先来自客户端预取)开始(并立即被消费)。在我们的应用程序中,这会导致活锁。

您可以通过将消息副本发布到队列并确认已经交付的一对一事务来解决此问题(但我建议仔细阅读文档中有关事务的部分)或使用死信处理暂时无法处理的消息。

于 2013-04-03T11:12:09.983 回答