有没有办法让Pika BlockingConnection一次消耗一条消息?

时间:2018-10-10 05:57:14

标签: rabbitmq pika

import pika

params = pika.URLParameters([URL])
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.queue_declare(queue='test', durable=True)
channel.basic_consume(do_things, queue='test')

try:
    channel.start_consuming()
except KeyboardInterrupt:
    channel.stop_consuming()
except:
    rollbar.report_exc_info()
finally:
    channel.close()
    connection.close()

这是我用来消费消息的代码。问题是,假设我在test队列中有100条消息。一旦启动使用者,它将获得所有100条消息并对其进行逐一处理,即队列状态变为:消息就绪:0,未确认:100,总计:100。结果,我将无法旋转新的使用者可以并行处理100条消息,因为没有消息留给新的使用者(所有消息都被现有的使用者使用,尽管大多数消息尚未处理)。有没有办法让消费者一次只接收一条消息?

1 个答案:

答案 0 :(得分:1)

您需要指定频道所需的Quality of Service

在您的情况下,prefetch_count是您需要的参数。

import pika

params = pika.URLParameters([URL])
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.basic_qos(prefetch_count=1)