tutorial net español .net message-queue rabbitmq amqp

.net - net - rabbitmq python



Comprobar el tamaño de la cola RabbitMQ del cliente (8)

Actualización: parece que la implementación de pika de queue_declare (..) ha cambiado desde la muy útil publicación de mmalone.

En python / pika (v0.9.5) aún es posible verificar la profundidad de la cola a través de pika, pero requiere un enfoque un poco más indirecto.

queue_declare (...) pasa un objeto de método a su función de devolución de llamada, que luego puede inspeccionar. Por ejemplo, para verificar la cantidad de mensajes y consumidores en la cola llamada ''myQueue'' :

def cbInspect(qb): messagesInQueue = qb.method.message_count print "There are %d messages in myQueue" % messagesInQueue consumersInQueue = qb.method.consumer_count print "There are %d consumers in myQueue" % consumersInQueue return myChannel = channel.queue_declare(callback=cbInspect, queue=''myQueue'', passive=True)

Espero que esto ayude, y por favor, vente conmigo, soy nuevo por aquí :-)

¿Alguien sabe si hay una manera de verificar la cantidad de mensajes en una cola RabbitMQ desde una aplicación cliente?

Estoy usando la biblioteca de cliente .NET.


Al menos a partir de RabbitMQ 3.3.5, puede hacer esto en un programa C # sin ninguna biblioteca de cliente RabbitMQ llamando a la API de HTTP RabbitMQ Management:

// The last segment of the URL is the RabbitMQ "virtual host name". // The default virtual host name is "/", represented urlEncoded by "%2F". string queuesUrl = "http://MY_RABBITMQ_SERVER:15672/api/queues/%2F"; WebClient webClient = new WebClient { Credentials = new NetworkCredential("MY_RABBITMQ_USERNAME", "MY_RABBITMQ_PASSWORD") }; string response = webClient.DownloadString(queuesUrl);

El nombre de usuario y la contraseña son los mismos que usa para iniciar sesión en la interfaz de usuario de la consola de administración de RabbitMQ.

La respuesta será una cadena JSON con la lista de colas, incluidos sus recuentos de mensajes, entre otras propiedades. (Si lo desea, puede deserializar ese JSON en un objeto C # utilizando una biblioteca como Json.NET ).

La documentación de la API se instala junto con la consola de administración RabbitMQ y debe estar disponible en ese servidor en http: // MY_RABBITMQ_SERVER: 15672 / api .


Estoy usando la versión 3.3.1 de .Net Client Library.

Utilizo lo siguiente, que es muy similar a la segunda sugerencia de Ralph Willgoss, pero puede proporcionar el nombre de la cola como argumento.

QueueDeclareOk result = channel.QueueDeclarePassive(queueName); uint count = result != null ? result.MessageCount : 0;



Si desea hacer esto en .Net, verifique qué versión de la biblioteca de Cliente está utilizando.

Estoy usando la versión 2.2.0 y tuve que usar BasicGet (queue, noAck).
En esta versión de la Biblioteca, QueueDeclare () solo devuelve una cadena que contiene el nombre de la cola.

BasicGetResult result = channel.BasicGet("QueueName", false); uint count = result != null ? result.MessageCount : 0;


Sé de la versión 2.6.1 , QueueDeclare () devuelve un objeto de tipo QueueDeclareOk.

QueueDeclareOk result = channel.QueueDeclare(); uint count = result.MessageCount;


Alternativamente, puede llamar desde la línea de comando:

<InstallPathToRabbitMq>/sbin/rabbitmqctl.bat list_queues

Y verá la siguiente salida:

Listado de colas ...
QueueName 1
...hecho.

HTH


Tengo 2 años de retraso, pero lo busqué yo mismo y descubrí que rabbitmq te da una secuencia de comandos simple para comunicarte con los nodos de Erlang. Está en la carpeta sbin donde se encuentra el script de inicio de RabbitMQ ... así que básicamente puedes decir

./rabbitmqctl list_queues

esto mostrará las colas junto con el recuento de mensajes pendientes para esas colas de manera similar, también se puede decir

./rabbitmqctl list_channels ./rabbitmqctl list_connections

etc. Para más información, puede visitar here


mi pequeño fragmento basado en la respuesta de Myydrralls. Creo que si tuviera un código en su respuesta, podría haberlo notado mucho más rápido.

public uint GetMessageCount(string queueName) { using (IConnection connection = factory.CreateConnection()) using (IModel channel = connection.CreateModel()) { return channel.MessageCount(queueName); } }


Usted puede recuperar esto a través del cliente. Cuando se realiza una operación queue_declare , RabbitMQ devuelve tres tuplas que contienen (<queue name>, <message count>, <consumer count>) . El argumento passive para queue_declare le permite verificar si existe una cola sin modificar el estado del servidor. Entonces puede usar queue_declare con la opción passive para verificar la longitud de la cola. No estoy seguro acerca de .NET, pero en Python se ve algo como esto:

name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)