Используя RabbitMQ, есть ли способ просмотреть содержимое очереди без очереди? - PullRequest
39 голосов
/ 15 января 2011

Как способ изучения RabbitMQ и python, я работаю над проектом, который позволяет мне распределять коды h264 между несколькими компьютерами.Основы сделаны, у меня есть демон, который работает на Linux или Mac, который присоединяется к очереди, принимает задания и кодирует их с помощью HandBrakeCLI и подтверждает сообщение после завершения кодирования.Я также создал простой инструмент для помещения элементов в очередь.

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

Я знаю, что существует запутанный способ синхронизации списка диспетчера очереди с фактической рабочей очередью, но я бы хотел, чтобы это было "постоянным", поскольку я должен иметь возможность закрыть диспетчер очереди и снова открытьэто позже, чтобы увидеть очередь.

Ответы [ 3 ]

37 голосов
/ 15 февраля 2012

Просмотр очереди напрямую не поддерживается, но если вы объявляете очередь без автоматических подтверждений и не подтверждаете полученные сообщения, вы можете увидеть в ней все. После того, как вы посмотрели, отправьте ОТМЕНА на канал или отсоедините и повторно подключите, чтобы все сообщения были поставлены в очередь. Это увеличивает число в заголовках сообщений, но в остальном оставляет сообщения нетронутыми.

Я создал приложение, в котором порядок сообщений не был особенно важен, и я часто сканировал очередь таким образом. Если бы я обнаружил проблему, я бы сбросил сообщения в файл, исправил бы их и повторно отправил.

Если вам нужно время от времени заглядывать в одно или два сообщения, вы можете сделать это с помощью плагина управления RabbitMQ.

Кроме того, если вам нужен только счетчик сообщений, вы можете получать его каждый раз, когда объявляете очередь, или по команде basic.get.

2 голосов
/ 01 сентября 2017

@ MichaelDillon, основываясь на вашем ответе, чтобы облегчить жизнь другим, я привожу здесь пример без_экспозиции:

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='Q.hello')


def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    # ch.basic_ack(delivery_tag=method.delivery_tag)

channel.basic_consume(callback, queue='Q.hello')

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
0 голосов
/ 26 января 2011

То, что вы хотите сделать, называется просмотром очереди, хотя я получаю из этого , что RabbitMQ еще не поддерживает это.

...