2009-06-24 8 views

Répondre

64

Vous pouvez réellement récupérer ceci via le client. Lorsque vous effectuez une opération queue_declare, RabbitMQ renvoie un trois ligne contenant (<queue name>, <message count>, <consumer count>). L'argument passive de queue_declare vous permet de vérifier si une file d'attente existe sans modifier l'état du serveur. Vous pouvez donc utiliser queue_declare avec l'option passive pour vérifier la longueur de la file d'attente. Pas sûr .NET, mais en Python, il ressemble à ceci:

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

Ceci devrait être la réponse acceptée, même s'il a manqué Basic.Get en tant que 2ème source de cette information. –

+1

Qu'est-ce que chan ici et comment l'importer? – Kishan

+0

Ce n'est plus la meilleure façon de le faire. – Theyouthis

10

Je suis 2 ans trop tard, mais je cherchais moi-même et a constaté que rabbitmq donne u script simple de communiquer aux noeuds Erlang .. son dans le dossier sbin où le script de départ pour RabbitMQ est located..so vous pouvez dire essentiellement

./rabbitmqctl list_queues 

cela affichera les files d'attente ainsi que le nombre de messages en attente de ces files d'attente vous pouvez aussi dire de la même

./rabbitmqctl list_channels 
./rabbitmqctl list_connections 

etc. Pour plus d'informations, vous pouvez visiter here

5

Mise à jour: il semble que la mise en œuvre de pika queue_declare (..) a changé depuis poste très utile de mmalone.

En python/pika (v0.9.5), il est toujours possible de vérifier la profondeur de la file d'attente via pika, mais cela nécessite une approche légèrement plus indirecte. Queue_declare (...) passe un objet méthode dans sa fonction de rappel, que vous pouvez ensuite inspecter. Par exemple, pour vérifier le nombre de messages et les consommateurs dans la file d'attente nommée '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) 

Hope this helps, et s'il vous plaît allez-y doucement sur moi, je suis nouveau ici :-)

+0

channel.queue_declare renvoie un objet qui contient le nombre de messages en cours, donc si vous voulez éviter un rappel, vous pouvez également accéder au nombre de messages comme ceci: myChannel.method.message_count – corford

10

Si vous voulait faire cela dans .Net, vérifiez quelle version de la bibliothèque Client que vous utilisez.

J'utilise la version 2.2.0 et j'ai dû utiliser BasicGet (queue, noAck).
Dans cette version de la bibliothèque, QueueDeclare() renvoie uniquement une chaîne contenant le nom de la file d'attente.

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


Je sais de la 2.6.1 version QueueDeclare() retourne un objet de type QueueDeclareOk.

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


Vous pouvez appeler à partir de la ligne de commande:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues 

Et vous voir la sortie suivante:

files d'attente ... Liste
QueueName 1
. ..terminé.

HTH

6

J'utilise la version 3.3.1 du .Net Client Library.

J'utilise ce qui suit, ce qui est très similaire à la deuxième suggestion de Ralph Willgoss mais vous pouvez fournir le nom de la file d'attente comme argument.

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

Vous pouvez utiliser la méthode de MessageCount de IModel, documenté ici

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)

edit: Je sais que c'est un poste très ancien, mais il est la première réponse de Google, et je l'espère aider les gens à chercher cette réponse dans le futur.

+0

C'est la première fois que j'ai vu cela mentionné. Pourquoi donc?!! – Theyouthis

1

Au moins de RabbitMQ 3.3.5, vous pouvez le faire dans un programme C# sans aucune bibliothèque cliente RabbitMQ en appelant l'API HTTP Gestion RabbitMQ:

// 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); 

Le nom d'utilisateur et mot de passe sont les mêmes que ceux vous utilisez pour vous connecter à l'interface utilisateur de la console de gestion RabbitMQ.

La réponse sera une chaîne JSON avec la liste des files d'attente, y compris leur nombre de messages, parmi d'autres propriétés. (Si vous le souhaitez, vous pouvez désérialiser que JSON dans un objet C# en utilisant une bibliothèque comme Json.NET.)

La documentation de l'API est installé avec la console de gestion RabbitMQ et devrait être disponible sur ce serveur à http://MY_RABBITMQ_SERVER:15672/api.

1

mon petit extrait basé sur la réponse de Myydrralls. Je pense que s'il avait du code dans sa réponse, je l'aurais remarqué beaucoup plus vite.

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