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

在RabbitMQ中,如何使用特定密钥使用多条消息或读取队列中的所有消息或exchange中的所有消息?

鲜于裕
2023-03-14

我想使用来自特定队列或具有给定密钥的特定交换的多个消息。

因此,场景如下所示:

发布者发布消息1在队列1发布者发布消息2在队列1发布者发布消息3在队列1发布者发布消息4在队列2发布者发布消息5在队列2...消费者从队列1中消费消息一次获取[消息1,消息2,消息3],并在一次回调中处理它们

listen_to(queue_name , num_of_msg_to_fetch or all, function(messages){
//do some stuff with the returned list
});

这些消息不是同时出现的,就像事件一样,我希望将它们收集到队列中,打包并发送给第三方。

我也读过这篇文章:

http://rabbitmq.1065348.n5.nabble.com/Consuming-multiple-messages-at-a-time-td27195.html

谢谢

共有3个答案

商松
2023-03-14

您可能需要在概念上将域消息与RMQ消息分开。作为生产者,您可以将多个域消息捆绑到单个RMQ消息和。product()将其发送到RMQ。请记住,这种设计由于存在窗口而引入超时和延迟(您可能会从Kafka那里得到一些印象,Kafka以延迟为代价进行捆绑以优化I/O)。

作为一个消费者,你会有一个消费者,典型的。handleDelivery将转换接收的正文以进行处理的实现:字节[]-

梁丘亦
2023-03-14

如果您想使用特定队列中的多条消息,可以尝试如下操作。

channel.queueDeclare(QUEUE_NAME, false, false,false, null);
Consumer consumer = new DefaultConsumer(channel){
   @Override
   public void handleDelivery(String consumerTag,
                                       Envelope envelope,
                                       AMQP.BasicProperties properties,
                                       byte[] body)
                    throws IOException {
                
                    String message = new String(body, "UTF-8");
                    logger.info("Recieved Message --> " + message);
                
   }
};
家志学
2023-03-14

不要直接从队列中消耗,因为队列遵循循环算法(AMQP授权)使用铲子将队列内容传输到扇出交换,并直接消耗来自该交换的消息。您可以跨所有连接的消费者获取所有消息。:)

 类似资料:
  • 我想构建一个简单的消费者程序(java ),以获取ActiveMQ主题中存储的所有消息。我有一个在队列中发送文本消息的生成器。 但我不知道如何开始写我的消费者来检索旧消息并等待新消息。 如果你有一个例子,谢谢! 这是我的制片人:http://pastebin.com/uRy9D8mY 这是我的消费者:http://pastebin.com/bZh4r66e 当我先于消费者运行生产者,然后运行消费者

  • 我想从azure服务总线(队列)读取所有消息。 我已经按照下面的指示链接https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-php-how-to-use-queues 目前它只能获取一条消息。。 我想从服务总线(队列)获取所有消息。 提前谢谢。。

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

  • 我是Azure服务总线的新手,我应该将消息推送到队列中,然后有一个单独的计划任务,该任务将读取该队列中的所有活动消息,并将它们批量导入到sql我以前尝试过这个代码,当我调用时它正在工作它在发送消息后立即工作,但现在它在单独的计划任务中不工作。任何帮助为什么或什么我可以用来批量阅读信息或这是不可能的

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

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