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

如何逐个消耗RabbitMQ死信队列中的消息

吉玉宸
2023-03-14

这种需求类似于通过公开的REST服务API(Spring Boot)处理来自死信队列的消息。以便一旦调用REST服务,就会从DL队列中消耗一条消息,并将再次发布到主队列中进行处理。@RabbitListener(queues=“queue_name”)立即使用消息,这在场景中是不需要的。该消息只需由REST服务API使用。有什么建议或解决办法吗?

共有1个答案

仉宪
2023-03-14

我认为rabbitlistener在这里没有帮助。

但是,您可以手动实现此行为。

Spring Boot自动创建rabbitMQ连接工厂,以便您可以使用它。当http调用只是手动读取队列中的单个消息时,您可以使用basic.get同步获取一条消息:

@Autowire 
private ConnectionFactory factory 

void readSingleMessage() {
   Connection connection = null;
   Channel channel = null;
   try {
      connection = factory.newConnection();
      channel = connection.createChannel();

      channel.queueDeclare(QUEUE_NAME, true, false, false, null);

      GetResponse response = channel.basicGet(QUEUE_NAME, true);
      if (response != null) {
         //Do something with the message
      }
   } finally {
     //Check if not null
     channel.close();
     connection.close();
   }

}
 类似资料:
  • 我有一个使用RabbitMQ构建的发布-订阅场景。有一个交换,其中消息由发布者发送,订阅该交换的任何使用者在其各自的队列中接收这些消息。这是一个扇出场景,其中有一个生产者,但有多个消费者。 现在我愿意在系统中集成一个死信队列,以便稍后处理被拒绝的消息。我的问题是 1)我应该为每个使用者配置一个单独的死信队列,还是应该有一个单独的死信队列来处理来自所有使用者的所有被拒绝的消息? 2)如果两者都有可能

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

  • 主要内容:6. 死信队列,6.1 死信的概念,6.2 死信的来源,6.3 死信实战6. 死信队列 6.1 死信的概念 死信,顾名思义就是无法被消费的消息。 字面意思可以这样理解,一般来说,producer(生产者)将消息投递到 broker 或者直接到 queue(队列)里了。consumer(消费者)从queue中取出消息后进行消费,但某些时候由于特定的原因导致 queue 中的消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。 应用场景:

  • 这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无

  • 我运行生产者,它生成N条消息,我在仪表板上看到它们。当我运行接收器时,它会接收来自队列的所有消息,并且队列为空。 我需要有多个生产者生成消息到同一个队列。多个客户从队列中接收消息。消息将被队列TTL删除。但是现在第一个接收者从队列中获取所有消息。我怎么能做到这一点?