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

将消息返回到rabbitmq中的队列末尾,rabbitmq,amqp,spring-rabbit,Rabbitmq,Amqp,Spring Rabbit,我有交换和排队。生产者不需要消费确认,但在某些情况下,由于缺少其他数据,消费者在当前时刻可能无法处理消息。因此,我希望将这些消息返回到队列的末尾。如何做到这一点?还是在我拒绝邮件时自动完成 流量: Message1被使用并在数据库中创建一些记录 Message2被使用并检查数据库中是否有记录,如果有,则更新记录。若数据库中并没有记录,那个么消息应该返回到队列的末尾 所以存在消息排序问题,在一般情况下,我会按顺序获取消息,因为大多数组件都能正确地传递消息。我想解决一个潜在的问题,当Messag

我有交换和排队。生产者不需要消费确认,但在某些情况下,由于缺少其他数据,消费者在当前时刻可能无法处理消息。因此,我希望将这些消息返回到队列的末尾。如何做到这一点?还是在我拒绝邮件时自动完成

流量:

  • Message1被使用并在数据库中创建一些记录
  • Message2被使用并检查数据库中是否有记录,如果有,则更新记录。若数据库中并没有记录,那个么消息应该返回到队列的末尾
所以存在消息排序问题,在一般情况下,我会按顺序获取消息,因为大多数组件都能正确地传递消息。我想解决一个潜在的问题,当Message1的制作者由于负载过重或其他原因而不能立即将消息放到exchange时。在这种情况下,将首先使用Message2,但数据库中没有足够的信息来处理它。我希望将此消息返回到队列,但请确保此消息2将转到队列的尾部。若它到达头部,若我只使用一个队列,我将得到无限循环


另一个问题是,是否有可能跟踪消费者尝试处理消息但返回消息的次数。如果有可能像我前面描述的那样将消息放在队列的尾部,但由于某种原因,Message1的生产者已死亡,并且将不会有Message1,那么我希望在多次重试或一段时间后使Message2死亡

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

RabbitMQ始终将被拒绝的消息放在队列的开头。要将它们放在尾部,您必须自己发布它们(例如,使用
rabbitmplate
)。您可以添加一个包含重试次数的标题。

要锁定Gary的答案,您可以使用消息,并看到以后需要处理它。再次发布同一消息并确认当前消息。要跟踪重试,您可以按照建议使用标头方法,也可以将该信息添加到正在发布的消息中。在消息发布但确认未发生的奇怪情况下,您可能需要添加一些幂等处理。您可以在邮件中添加一个唯一标识符以启用此类跟踪。若要锁定Gary的答案,请使用该邮件,并查看以后是否需要处理该邮件。再次发布同一消息并确认当前消息。要跟踪重试,您可以按照建议使用标头方法,也可以将该信息添加到正在发布的消息中。在消息发布但确认未发生的奇怪情况下,您可能需要添加一些幂等处理。您可以在邮件中添加一个唯一标识符以启用此类跟踪。