Подтвердить что ты не робот

Используя RabbitMQ, есть ли способ просмотреть содержимое очереди без операции удаления из очереди?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

@MichaelDillon основывается на вашем ответе, чтобы облегчить жизнь другим. Я помещаю здесь пример no_ack:

#!/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()

Ответ 3

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