Есть ли способ позволить Pika BlockingConnection использовать одно сообщение за раз? - PullRequest
0 голосов
/ 10 октября 2018
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 сообщений и обрабатывает их одно за другим, то есть статус очереди стал: message ready: 0, unacked: 100, total: 100. В результате я не смогу раскрутитьновые потребители для параллельной обработки сообщения 100, поскольку для новых потребителей не осталось сообщений (все они были приняты существующим потребителем, хотя большинство сообщений не было обработано).Можно ли разрешить потребителю принимать только 1 сообщение за раз?

1 Ответ

0 голосов
/ 10 октября 2018

Вам необходимо указать Качество обслуживания , которое требуется для вашего канала.

В вашем случае prefetch_count - это необходимый параметр.

import pika

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