Usando RabbitMQ, ¿hay una manera de mirar el contenido de la cola sin una cola de espera?

Como forma de aprender RabbitMQ y python, estoy trabajando en un proyecto que me permite distribuir codificaciones h264 entre varias computadoras. Lo básico está hecho, tengo un demonio que se ejecuta en Linux o Mac que se une a la cola, acepta trabajos y los codifica usando HandBrakeCLI y envía el mensaje una vez que se completa la encoding. También he construido una herramienta simple para empujar elementos en la cola.

Ahora quiero expandir las capacidades de la herramienta que empuja los elementos en la cola para que pueda ver lo que hay en la cola. Soy consciente de la capacidad de ver cuántos elementos hay en la cola, pero quiero poder recibir los mensajes reales para poder mostrar qué película o progtwig de televisión está esperando para ser codificado todavía. La idea es que el administrador de colas reciba mensajes de los clientes del codificador cuando un trabajo haya finalizado y luego actualice la lista de colas.

Sé que hay una forma complicada de mantener la lista del administrador de colas sincronizada con la cola de trabajo real, pero me gustaría que esto fuera “persistente”, ya que debería poder cerrar el administrador de colas y volver a abrirlo más tarde para ver la cola .

La navegación de la cola no se admite directamente, pero si declara una cola SIN reconocimientos automáticos y no ACEPTA los mensajes que recibe, puede ver todo lo que hay en ella. Después de que haya echado un vistazo, envíe un CANCELAR en el canal o desconéctelo y vuelva a conectarlo para que todos los mensajes se vuelvan a poner en cola. Esto incrementa un número en los encabezados de los mensajes, pero por lo demás deja los mensajes intactos.

Construí una aplicación en la que el orden de los mensajes no era tan importante, y de esta manera exploraba la cola con frecuencia. Si encontrara un problema, descargaría los mensajes en un archivo, los arreglaría y los reenviaría.

Si solo necesitas mirar un mensaje o dos de vez en cuando, puedes hacerlo con el complemento de administración RabbitMQ.

Además, si solo necesita un recuento de mensajes, puede obtenerlo cada vez que declare la cola o con un comando basic.get.

@MichaelDillon basado en su respuesta para facilitar la vida de los demás. Pongo aquí un ejemplo de “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() 

Lo que quieres hacer es llamar a navegar por la cola, aunque de esto deduzco que RabbitMQ aún no lo admite.