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

Har*_*son 2 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()
Run Code Online (Sandbox Code Playgroud)

这是我用来消费消息的代码。问题是,假设队列中有 100 条消息test。一旦我启动消费者,它就会获取所有100条消息并一一处理,即队列状态变为:消息就绪:0,未确认:100,总计:100。结果,我无法旋转启动新消费者并行处理这 100 条消息,因为没有为新消费者留下任何消息(所有消息均已被现有消费者获取,尽管大多数消息尚未处理)。有没有办法让消费者一次只接受1条消息?

nox*_*fox 5

您需要指定您的频道所需的服务质量。

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

import pika

params = pika.URLParameters([URL])
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.basic_qos(prefetch_count=1)
Run Code Online (Sandbox Code Playgroud)