将消息返回到rabbitmq中的队列末尾

时间:2017-06-22 16:32:22

标签: rabbitmq amqp spring-rabbitmq

我有交换和队列。制作人不需要消费确认,但由于缺乏其他数据,消费者在当前时刻可能无法处理消息。因此,我想将这些消息返回到队列的末尾。这该怎么做?或者当我拒绝消息时它会自动完成吗?

流程:

  • Message1被消耗并在数据库中创建一些记录。
  • Message2被消耗并检查数据库中是否有记录,如果是,则更新记录。如果数据库中没有记录,则应将消息返回到队列末尾。

因此存在消息排序问题,并且在一般情况下我按顺序获取消息,因为大多数组件正确地传递消息。我想解决潜在的情况,因为Message1的生产者由于负载过重或其他原因而无法立即将消息置于交换状态。在这种情况下,将首先使用Message2,但数据库中没有足够的信息来处理它。我希望将此消息返回到队列,但请确保此Message2将转到队列尾部。如果它将成为头,如果我只使用一个队列,我将得到无限循环。

附带问题是,如果可以跟踪消费者尝试处理消息但返回消息的次数。如果有可能将消息放入队列的尾部,就像我之前描述的那样,但由于某种原因,Message1的Producer死了,并且没有Message1,我想在一些重试或一段时间之后使Message2死机。

1 个答案:

答案 0 :(得分:2)

RabbitMQ总是将拒绝的消息放在队列的头部。要将它们放在尾部,您必须自己发布它们(例如使用RabbitTemplate)。您可以添加包含重试次数的标头。