当前位置: 首页 > 知识库问答 >
问题:

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

司空鸣
2023-03-14

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

流量:

  • Message1被使用并在数据库中创建一些记录

所以存在消息排序问题,在一般情况下,我会按顺序获取消息,因为大多数组件都能正确地传递消息。我想解决一个潜在的问题,当Message1的制作人由于负载过重或其他原因无法立即将消息发送到exchange时。在这种情况下,Message2将首先被使用,但数据库中没有足够的信息来处理它。我希望将此消息返回到队列,但请确保此消息2将转到队列的尾部。如果它到达头部,如果我只使用一个队列,我将得到无限循环。

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

共有1个答案

公孙成仁
2023-03-14

RabbitMQ总是将被拒绝的消息放在队列的最前面。要想把它们放在最后,你必须自己发布它们(例如使用rabbitmplate)。可以添加包含重试次数的标题。

 类似资料:
  • 在队列选项卡的rabbitMQ web界面上,我看到了“概述”面板,我在其中找到了以下内容: 排队消息: 准备好了 未确认 总数 我猜“总数”是多少。但什么是“准备就绪”和“未确认”?“准备好了”——传递给消费者的信息?“未确认”-? 消息费率: 发表 交付 重新交付 承认 这些信息是什么?尤其是“重新交付”和“确认”?这是什么意思?

  • 我想知道是否有任何方法可以将消息返回到队列中的原始位置。例如,假设我们有这样的顺序: ,为头,为尾。通常情况下,当我们使用或,时,它只是将消息排在当前尾部之后。在这种情况下,当重新执行时,新的排序变为。然而,我想知道是否有任何方法可以排队到队列的开头。因此,如果被“发回”,它将被放置在队列的开头,在其原始位置。 我使用Spring AMQP搜索解决方案。

  • 问题内容: 我们正在使用amqplib来发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将使我能够向管理员用户显示良好的状态图,并检测某个组件是否无法满足负载需求。 我在amqplib文档中找不到有关读取队列状态的任何信息。 有人可以指出我正确的方向吗? 问题答案: 使用皮卡: 使用PyRabbit: 使用HTTP 句法: 例: 注意:默认虚拟主机是需要转义为 使用C

  • 我将与一起使用中的这个库。所有使用者均为,所有队列均为(4小时)。 我有很多队列没有任何挂起的ack,但仍然保存着数百条消息。此外,队列不会在应该过期时过期,这将在几天后产生性能问题。我没有找到任何理由来解释为什么消息在ack处理之后仍然在队列中。 谢谢 管理工具中的一些快照:

  • 我发送消息从JavaSpring Boot应用程序到消费者是Python应用程序。 除了输入命令rabbitmqctl list\u queues时,一切正常,它显示视频队列0,这意味着队列中没有消息。 消费者正在接收消息并执行一些长过程;所以如果我连续发送多条消息,应该会有一些消息在队列中等待。我说得对吗? 制片人: 消费者 在哪里可以看到我声明的队列上的消息?因为虽然我知道队列中有消息,但使用

  • 我有一个使用Spring和RabbitMQ的项目设置。目前,我的应用程序可能会收到一条amqp消息,在另一个异步进程完成之前无法处理该消息(遗留和完全分离,我无法控制)。因此,结果是我可能不得不等待处理消息一段时间。其结果是变压器出现异常。 当消息被NACK回rabbitMQ时,它会将其放回队列的头部,并立即重新拉入队列。如果我收到的无法处理的消息等于并发侦听器的数量,我的工作流就会被锁定。它转动