Question

Est-ce que quelqu'un sait s'il existe un moyen de vérifier le nombre de messages dans une file d'attente RabbitMQ à partir d'une application cliente?

J'utilise la bibliothèque client .NET.

Était-ce utile?

La solution

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

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

Autres conseils

Je suis 2 ans trop tard, mais je le recherchais moi-même et je constate que rabbitmq vous donne un script simple pour communiquer avec les nœuds erlang ... il se trouve dans le dossier sbin où se trouve le script de départ pour RabbitMQ ... vous pouvez donc dire en gros

./rabbitmqctl list_queues

Ceci affichera les files d'attente ainsi que le nombre de messages en attente pour 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 le faire en .Net, vérifiez quelle version de la bibliothèque client vous utilisez.

J'utilise la version 2.2.0 et je devais utiliser BasicGet (queue, 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;


À partir de la version 2.6.1 , je sais que QueueDeclare () renvoie un objet de type QueueDeclareOk.

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


Vous pouvez également appeler à partir de la ligne de commande:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues

Et vous voyez la sortie suivante:

  

Liste des files d'attente ...
QueueName 1
... done.

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 en tant qu'argument.

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

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 encore possible de vérifier la profondeur de file d'attente via pika, mais il nécessite une approche un peu plus indirecte.

queue_declare (...) passe un objet de méthode à sa fonction de rappel, que vous pouvez ensuite inspecter. Par exemple, pour vérifier le nombre de messages et d’utilisateurs dans la file d’attente nommés '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 cela vous aidera, et s'il vous plait, allez-y doucement, je suis nouveau ici: -)

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 message, 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.

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(string queueName)
{
    using (IConnection connection = factory.CreateConnection())
    using (IModel channel = connection.CreateModel())
    {
        return channel.MessageCount(queueName);
    }
}

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

// 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 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 ce JSON en un objet C # à l'aide d'une bibliothèque telle que Json.NET . )

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

J'ai pu obtenir la taille / la profondeur de la file d'attente à partir d'un programme python.  1. en utilisant py_rabbit

    from pyrabbit.api import Client
    cl = Client('10.111.123.54:15672', 'userid', 'password',5)
    depth = cl.get_queue_depth('vhost', 'queue_name')
  1. kombu [un paquet python est généralement fourni avec l'installation du céleri]
conn = kombu.Connection('amqp://userid:password@10.111.123.54:5672/vhost')
conn.connect()
client = conn.get_manager()
queues = client.get_queues('vhost')
for queue in queues:
    if queue == queue_name:
    print("tasks waiting in queue:"+str(queue.get("messages_ready")))
    print("tasks currently running:"+str(queue.get("messages_unacknowledged")))

l'adresse ip est juste un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top