Vérifiez la taille de la queue RabbitMQ à partir du client

Est-ce que quelqu’un sait s’il existe un moyen de vérifier le nombre de messages dans une queue RabbitMQ à partir d’une application client?

J’utilise la bibliothèque client .NET.

Vous pouvez en fait récupérer ceci via le client. Lors de l’exécution d’une opération queue_declare , RabbitMQ renvoie un queue_declare contenant trois éléments (, , ) . L’argument passive de queue_declare vous permet de vérifier si une queue existe sans modifier l’état du serveur. Vous pouvez donc utiliser queue_declare avec l’option passive pour vérifier la longueur de la queue. Pas sûr de .NET, mais en Python, cela ressemble à ceci:

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

Je suis 2 ans trop tard mais je le cherchais moi-même et j’ai trouvé que rabbitmq vous donnait un script simple pour communiquer avec erlang nodes..its dans le dossier sbin où se trouve le script de démarrage de RabbitMQ.

 ./rabbitmqctl list_queues 

cela affichera les files d’attente avec le nombre de messages en attente de ces files d’attente de la même manière, vous pouvez également dire

 ./rabbitmqctl list_channels ./rabbitmqctl list_connections 

etc. Pour plus d’informations, vous pouvez visiter ici

Si vous souhaitez le faire dans .Net, vérifiez la 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 () ne renvoie qu’une chaîne contenant le nom de la queue.

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

Je connais la version 2.6.1 , QueueDeclare () renvoie un object de type QueueDeclareOk.

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

Vous pouvez également appeler depuis la ligne de commande:

 \sbin\rabbitmqctl.bat list_queues 

Et vous voyez la sortie suivante:

Liste des files d’attente …
QueueName 1
…terminé.

HTH

J’utilise la version 3.3.1 de la bibliothèque du client .Net.

J’utilise ce qui suit, qui est très similaire à la deuxième suggestion de Ralph Willgoss, mais vous pouvez fournir le nom de la queue en argument.

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

Mise à jour: il semble que l’implémentation pika de queue_declare (..) a changé depuis la publication très utile de mmalone.

En python / pika (v0.9.5), il est toujours possible de vérifier la profondeur de la queue via pika, mais cela nécessite une approche légèrement plus indirecte.

queue_declare (…) passe un object méthode dans sa fonction de rappel, que vous pouvez ensuite inspecter. Par exemple, pour vérifier le nombre de messages et de consommateurs dans la queue 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) 

J’espère que ça aide, et s’il vous plaît, allez-y doucement, je suis nouveau ici 🙂

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 peut-être remarqué beaucoup plus rapidement.

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

Vous pouvez utiliser la méthode MessageCount d’IModel, documentée 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.Ssortingng)

edit: Je sais que c’est un article très ancien, mais c’est la première réponse de Google, et j’espère que cela aidera les personnes à la recherche de cette réponse à l’avenir.

Au moins à partir de RabbitMQ 3.3.5, vous pouvez le faire dans un programme C # sans bibliothèque client RabbitMQ en appelant l’API HTTP de RabbitMQ Management:

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

Le nom d’utilisateur et le mot de passe sont les mêmes que ceux que 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, entre autres propriétés. (Si vous le souhaitez, vous pouvez désérialiser ce JSON dans un object C # en utilisant une bibliothèque comme Json.NET .)

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