RabbitMQ - 消费多个队列

4

我正在使用Python、RabbitMQ和Pika进行开发。

我有多个消费者和队列。我希望一个消费者可以从所有队列中获取消息。比如说,我有2个消费者和3个队列。我希望每个消费者都可以从队列1、2和3中读取消息。

我已经通过basic_get实现了这个功能:

basic_get(queue1)

basic_get(queue2)

basic_get(queue3)

=> 从队列1、2和3中各取出一条消息,然后重复以上步骤。

“问题”在于,我想使用basic_consume来设置qos(让队列每次推送n条消息)。我想要从队列1中获取n条消息,然后从队列2中获取n条消息,再从队列3中获取n条消息,然后回到队列1,以此类推。我不想先从第一个队列中获取所有的消息,然后再从第二个队列中获取所有的消息,以此类推。

我还没有找到一种实现基于basic_consume的多队列消费的方法。在我的情况下,是否可能实现basic_consume呢?

另外,当使用basic_consume时,我需要使用线程吗?它会在RabbitMQ中发送消息时调用一个函数。但据我所知,这是一个监听器,当它在监听时,我无法做任何事情。使用线程可以帮助我在监听新消息的同时处理任务,对吗?

谢谢。


请注意,在不同线程之间共享 Pika 连接是非线程安全的。每个线程必须拥有自己的连接:http://pika.readthedocs.io/en/latest/faq.html - Robben_Ford_Fan_boy
这个回答解决了你的问题吗?在 Python / Pika 中消费多个队列 - Trevor Boyd Smith
1个回答

0

设置{{link1:消费者的预取}, 然后你就可以这样做了。

我不确定具体的Pika代码,但文档中的示例是这样的:

channel.basicQos(10); // Per consumer limit
channel.basicConsume("my-queue", false, consumer);

关于线程...这取决于您特定的应用需求。通常情况下,增加进程实例的数量比使用线程更容易。但是,在单个进程中使用线程并行处理消息肯定是一种有效的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接