【问题标题】:Is there a way to let Pika BlockingConnection consume one message at a time?有没有办法让 Pika BlockingConnection 一次消费一条消息?
【发布时间】:2018-10-10 05:57:14
【问题描述】:
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 条消息,因为没有消息留给新消费者(所有消息都已被现有消费者接收,尽管大多数消息尚未处理)。有没有办法让消费者一次只接收一条消息?

【问题讨论】:

    标签: rabbitmq pika


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多