Как потреблять сообщения RabbitMQ через pika в течение ограниченного времени?

все примеры в учебнике pika заканчиваются вызовом клиента start_consuming(), который запускает бесконечный цикл. Эти примеры работают на меня.

однако, я не хочу, чтобы мой клиент, чтобы работать вечно. Вместо этого мне нужно, чтобы мой клиент потреблял сообщения в течение некоторого времени, например, 15 минут, а затем остановился.

Как это сделать?

1 ответов


вы можете потреблять сообщения по одному с вашими собственными циклами, скажем, у вас есть channel и queue настройка. Ниже будет проверяться, пуста ли очередь, а если нет, то выведите из нее одно сообщение.

queue_state = channel.queue_declare(queue, durable=True, passive=True)
queue_empty = queue_state.method.message_count == 0

объявление очереди, которая уже существует, и установка пассивных флагов позволяет запрашивать ее состояние. Далее обрабатываем сообщение:

if not queue_empty:
    method, properties, body = channel.basic_get(queue, no_ack=True)
    callback_func(channel, method, properties, body)

здесь callback_func это наш обычный обратный вызов. Убедитесь не для регистрации обратного вызова очереди когда вы хотите обработать этот путь.

# DO NOT
channel.basic_consume(callback_func, queue, no_ack=True)

это заставит руководство потреблять делать странные вещи. Я видел, что код queue_declare фактически обрабатывает сообщение, если я сделал этот вызов заранее.