2009-06-24 21 views

Respuesta

64

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 de queue_declare le permite verificar si existe una cola sin modificar el estado del servidor. De modo que puede usar queue_declare con la opción passive para verificar la longitud de la cola. No estoy seguro sobre .NET, pero en Python que se ve algo como esto:

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

Esta debería ser la respuesta aceptada, incluso si falló en Basic.Get como la segunda fuente de esta información. –

+1

¿Qué es chan aquí y cómo importarlo? – Kishan

+0

Esta ya no es la mejor manera de hacerlo. – Theyouthis

10

Tengo 2 años demasiado tarde, pero yo estaba buscando a mí mismo y encontré que RabbitMQ u da script sencillo para comunicarse con los nodos de Erlang .. su carpeta sbin en donde la secuencia de comandos de inicio para RabbitMQ es located..so básicamente se puede decir

./rabbitmqctl list_queues 

esto mostrará las colas junto con el recuento de mensajes pendientes de esas colas del mismo modo también se puede decir

./rabbitmqctl list_channels 
./rabbitmqctl list_connections 

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

5

Actualización: parece que la aplicación de pika queue_declare (..) ha cambiado desde muy útil puesto 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 comprobar el número de mensajes y los consumidores en la cola denominada '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 vaya fácil en mí, soy nuevo por aquí :-)

+0

channel.queue_declare devuelve un objeto que contiene el recuento de mensajes actual por lo que si desea evitar una devolución de llamada, también puede acceder al recuento de mensajes de esta manera: myChannel.method.message_count – corford

10

Si quería hacer esto en .Net, compruebe qué versión de la biblioteca de Cliente está utilizando.

Estoy usando la versión 2.2.0 y tuve que usar BasicGet (cola, 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 a la línea de comandos:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues 

y se ve el resultado siguiente:

colas Listing ...
NombreCola 1
. ..hecho.

HTH

6

estoy usando la versión 3.3.1 de la biblioteca cliente .NET.

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; 
3

Puede utilizar el método MessageCount del IModel, documentado aquí

http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.4/rabbitmq-dotnet-client-3.6.4-client-htmldoc/html/type-RabbitMQ.Client.IModel.html#method-M:RabbitMQ.Client.IModel.MessageCount(System.String)

edición: Sé que esto es un post muy antiguo, pero es la primera respuesta de Google, y espero que así sea ayudar a las personas que buscan esta respuesta en el futuro.

+0

Esta es la primera vez que lo he mencionado. ¡¡¿Porqué es eso?!! – Theyouthis

1

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

// 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 contraseña son los mismos que los usted 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, incluido el recuento de mensajes, entre otras propiedades. (Si lo desea, puede deserializar que JSON en un objeto de C# utilizando una biblioteca como Json.NET.)

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

1

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); 
    } 
} 
Cuestiones relacionadas