Saltar al contenido

Usando RabbitMQ, ¿hay alguna manera de ver el contenido de la cola sin una operación de quitar la cola?

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

Solución:

La exploración de colas no es compatible directamente, pero si declara una cola SIN reconocimientos automáticos y no ACK los mensajes que recibe, entonces puede ver todo lo que contiene. Después de haberlo revisado, envíe un CANCELAR en el canal o desconéctese y vuelva a conectarse para que todos los mensajes se pongan en cola. Esto incrementa un número en los encabezados de los mensajes, pero deja los mensajes intactos.

Creé una aplicación en la que el orden de los mensajes no era muy importante y, con frecuencia, escaneaba la cola de esta manera. Si encontraba un problema, volcaba los mensajes en un archivo, los arreglaba y los volvía a enviar.

Si solo necesita echar un vistazo a un mensaje o dos de vez en cuando, puede 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 en un comando basic.get.

@MichaelDillon basado en su respuesta para hacer la vida más fácil a los demás, estoy poniendo 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()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *