Vérifier la taille de la file D'attente RabbitMQ auprès du client
est-ce que quelqu'un sait s'il y a un moyen de vérifier le nombre de messages dans une file D'attente RabbitMQ à partir d'une application client?
j'utilise la bibliothèque client. Net.
8 réponses
vous pouvez le récupérer via le client. Quand effectuer un queue_declare
operation RabbitMQ renvoie un "three tuple" contenant (<queue name>, <message count>, <consumer count>)
. passive
l'argument de jeu_declare vous permet de vérifier l'existence d'une file d'attente sans modifier l'état du serveur. Ainsi, vous pouvez utiliser queue_declare
passive
option pour vérifier la longueur de la file d'attente. Pas sûr de .NET, mais en Python il ressemble à quelque chose comme ceci:
name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
je suis en retard de 2 ans mais je le cherchais moi-même et j'ai trouvé que rabbitmq donne u script simple pour communiquer aux noeuds d'erlang..c'est dans le dossier sbin que se trouve le script de départ pour RabbitMQ. donc vous pouvez dire
./rabbitmqctl list_queues
cela affichera les files d'attente ainsi que le nombre de messages en attente de ces Files d'attente de même, vous pouvez également dire
./rabbitmqctl list_channels
./rabbitmqctl list_connections
etc. Pour plus d'informations, vous pouvez visiter ici
si vous voulez faire cela dans .Net, vérifiez quelle version de la bibliothèque Client vous utilisez.
j'utilise le 2.2.0 version et J'ai dû utiliser BasicGet (file, noAck).
Dans cette version de la bibliothèque QueueDeclare() ne renvoie qu'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 à partir de la 2.6.1 version, QueueDeclare () renvoie un objet de type QueueDeclareOk.
QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;
Alternativement, vous pouvez appeler depuis la ligne de commande:
<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues
Et vous voyez le résultat suivant:
listes d'attente...
QueueName 1
...faire.
HTH
j'utilise la version 3.3.1 de la bibliothèque Client. Net.
j'utilise ce qui suit, qui est très similaire à la seconde 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;
mise à jour: il apparaît que la mise en œuvre de Pika de queue_declare(..) a changé depuis mmalone est très utile de poste.
In 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 un peu plus indirecte.
queue_declare (...) passe un objet method dans sa fonction callback, que vous pouvez ensuite inspecter. Par exemple, pour vérifier le nombre de messages et les consommateurs dans la file d'attente nommé '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)
espérons que cela aide, et s'il vous plaît allez doucement sur moi, je suis nouveau ici: -)
mon petit extrait basé sur la réponse de Myydrralls. Je pense que s'il avait le code dans sa réponse, je l'aurais remarqué plus vite.
public uint GetMessageCount(string 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
edit: je sais que c'est un très vieux post, mais c'est la première réponse de google, et j'espère que ça aidera les gens à la recherche pour répondre à cette question dans 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 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 le mot de passe sont les mêmes que ceux que vous utilisez pour vous connecter à L'interface de gestion de la console de RabbitMQ.
Response 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 desérialiser ce JSON dans un objet C# en utilisant une bibliothèque comme Json.NET.)
la documentation de L'API est installée avec la console de gestion RabbitMQ et devrait être disponible sur ce serveur à http://MY_RABBITMQ_SERVER:15672/api .