Как потреблять сообщения 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 фактически обрабатывает сообщение, если я сделал этот вызов заранее.