【发布时间】:2014-08-22 00:23:09
【问题描述】:
我正在尝试创建一个订阅多个队列的消费者,然后在消息到达时对其进行处理。
问题在于,当第一个队列中已经存在一些数据时,它会消耗第一个队列,而永远不会去消耗第二个队列。 但是,当第一个队列为空时,它确实会转到下一个队列,然后同时消耗两个队列。
我首先实现了线程,但想避开它,当 pika 库为我完成它时没有太多复杂性。以下是我的代码:
import pika
mq_connection = pika.BlockingConnection(pika.ConnectionParameters('x.x.x.x'))
mq_channel = mq_connection.channel()
mq_channel.basic_qos(prefetch_count=1)
def callback(ch, method, properties, body):
print body
mq_channel.basic_ack(delivery_tag=method.delivery_tag)
mq_channel.basic_consume(callback, queue='queue1', consumer_tag="ctag1.0")
mq_channel.basic_consume(callback, queue='queue2', consumer_tag="ctag2.0")
mq_channel.start_consuming()
【问题讨论】:
-
我尝试了您的代码,唯一的更改是添加记录器以防止异常,并声明队列。该代码按预期工作。我向每个队列发布了一些消息,这些消息在 CLI 上被路由和回显
-
您好,您可以尝试使用预先填充的队列,然后启动消费者。让我知道这是否也能按预期工作。
-
我刚刚试过了,它不起作用。我只看到来自第一个队列的消息。
-
这就是我要说的。是不是很奇怪?你有什么想法吗?
-
我对python客户端不太了解,所以才请Gavin bellow回答