Pregunta simple, pero Google o el código fuente abierto de Pika no ayudaron. ¿Hay alguna forma de consultar el tamaño de la cola actual (contador de elementos) en Pika?Obtener tamaño de cola en Pika (AMQP Python)
Respuesta
Hay dos formas de obtener el tamaño de cola en el protocolo AMQP. Puede usar Queue.Declare o Basic.Get.
Si está consumiendo mensajes a medida que llegan utilizando Basic.Consume, no podrá obtener esta información a menos que se desconecte (timeout) y redeclare la cola, o bien reciba un mensaje pero no lo reproduzca. En las versiones más recientes de AMQP, puede volver a colocar el mensaje de manera activa.
En cuanto a Pika, no sé los detalles, pero los clientes de Python para AMQP han sido una espina en mi costado. A menudo necesitará monopatch clases para obtener la información que necesita, o para permitir que un cliente de cola exceder el tiempo de espera para que pueda hacer otras cosas a intervalos periódicos como estadísticas de registro o averiguar cuántos mensajes están en una cola.
Otra forma de evitar esto es abandonar y utilizar la clase Pipe para ejecutar sudo rabbitmqctl list_queues -p my_vhost
. Luego analice la salida para encontrar el tamaño de todas las colas. Si hace esto, necesitará configurar /etc/sudoers
para no solicitar la contraseña de sudo habitual.
Rezo para que alguien más con más experiencia en Pika responda esto señalando cómo puedes hacer todas las cosas que mencioné, en cuyo caso descargaré Pika y patearé los neumáticos. Pero si eso no sucede y estás teniendo problemas con el mapeo del código de Pika, eche un vistazo al haigha
. Descubrí que su código es mucho más sencillo que otras bibliotecas cliente de Python AMQP porque se adhieren al protocolo AMQP.
Sé que esta pregunta es un poco antigua, pero he aquí un ejemplo de cómo hacer esto con pika.
Con respecto a AMQP y RabbitMQ, si ya ha declarado la cola, puede volver a declarar la cola con el passive flag encendido y manteniendo idénticos todos los demás parámetros de la cola. La respuesta a esta declaración declare-ok incluirá la cantidad de mensajes en la cola.
Aquí es un ejemplo 0.9.5 Con pika:
import pika
def on_callback(msg):
print msg
params = pika.ConnectionParameters(
host='localhost',
port=5672,
credentials=pika.credentials.PlainCredentials('guest', 'guest'),
)
# Open a connection to RabbitMQ on localhost using all default parameters
connection = pika.BlockingConnection(parameters=params)
# Open the channel
channel = connection.channel()
# Declare the queue
channel.queue_declare(
callback=on_callback,
queue="test",
durable=True,
exclusive=False,
auto_delete=False
)
# ...
# Re-declare the queue with passive flag
res = channel.queue_declare(
callback=on_callback,
queue="test",
durable=True,
exclusive=False,
auto_delete=False,
passive=True
)
print 'Messages in queue %d' % res.method.message_count
Esto imprimirá el siguiente:
<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>
<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>
Messages in queue 0
le proporcionará el número de mensajes del miembro de message_count
.
Muchas gracias. Tu respuesta me ayudó. – Evgeniy
Aquí se muestra cómo puede obtener la longitud de la cola utilizando pika (Teniendo en cuenta que está utilizando el usuario y contraseña predeterminados en el host local) reemplace q_name por el nombre de su cola.
import pika
connection = pika.BlockingConnection()
channel = connection.channel()
q = channel.queue_declare(q_name)
q_len = q.method.message_count
- 1. Tamaño de cola en Spring Cliente de AMQP Java
- 2. ¿Cuál es el mejor patrón para diseñar una aplicación RPC asíncrona usando Python, Pika y AMQP?
- 3. Buena biblioteca de Python para AMQP
- 4. cola de tamaño limitado
- 5. Pika + RabbitMQ: establecer basic_qos para prefetch = 1 todavía parece consumir todos los mensajes en la cola
- 6. Obtener tamaño de archivo en Python?
- 7. Uso de Tornado con Pika para monitoreo de colas asíncronas
- 8. RabbitMQ, Pika y estrategia de reconexión
- 9. Obtener el tamaño del monitor en python
- 10. Cola de multiprocesamiento en Python
- 11. AMQP contra Websphere MQ
- 12. Implementación AMQP C++
- 13. python. obtener el tamaño de un objeto
- 14. python obtener tamaño de cadena Unicode
- 15. teclado cola de bloqueo interrumpible en Python
- 16. tamaño del siguiente datagrama en cola - UDP
- 17. Python iterable Cola
- 18. AMQP + bibliotecas de Android
- 19. cola de python y cola de multiprocesamiento: ¿cómo se comportan?
- 20. Cola FIFO eficiente para trozos de bytes de tamaño arbitrario en Python
- 21. ¿Está lista la producción de AMQP?
- 22. cómo obtener el tamaño de la cola de mensajes de un actor de Akka?
- 23. Qué forma de conexión usar con pika
- 24. obtener el tamaño del texto svg en python
- 25. Instalación AMQP través PECL
- 26. implementación de cola de trabajos para python
- 27. ¿Cómo obtener todos los mensajes en la cola de Amazon SQS utilizando la biblioteca de boto en Python?
- 28. obtener tamaño de nswindow
- 29. ¿Hay alguna forma de enumerar las colas en un rabbitmq vía pika?
- 30. Verificar el tamaño de cola de RabbitMQ desde el cliente
Gracias por sudo rabbitmqctl list_queues -p my_vhost truco, voy a intentar eso. – Sebastian