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.

39
demandé sur Prof. Falken 2009-06-24 17:26:34

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_declarepassive 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)
64
répondu mmalone 2010-03-04 01:37:37

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

10
répondu Rafi 2010-11-22 16:46:21

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

9
répondu Ralph Willgoss 2014-07-04 14:24:21

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;
8
répondu Mike 2016-04-01 07:51:58

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: -)

5
répondu tohster 2012-07-24 18:21:30

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);
    }
}
4
répondu William Haggerty 2017-08-09 18:06:36

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.String)

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.

3
répondu Myddraall 2016-08-05 16:50:50

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 .

2
répondu Jon Schneider 2017-07-28 03:05:25