2009-06-24 8 views

Antwort

64

Sie können dies tatsächlich über den Client abrufen. Wenn eine queue_declare Operation ausgeführt wird, gibt RabbitMQ ein drei Tupel zurück, das (<queue name>, <message count>, <consumer count>) enthält. Mit dem Argument passive für queue_declare können Sie überprüfen, ob eine Warteschlange vorhanden ist, ohne den Serverstatus zu ändern. Sie können also queue_declare mit der Option passive verwenden, um die Warteschlangenlänge zu überprüfen. Nicht sicher .NET, aber in Python sieht es so etwas wie diese:

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

Dies sollte die akzeptierte Antwort sein, auch wenn er Basic.Get als zweite Quelle dieser Info verpassen. –

+1

Was ist hier und wie importiert man es? – Kishan

+0

Das ist nicht mehr der beste Weg, es zu tun. – Theyouthis

10

Ich bin 2 Jahre zu spät, aber ich war für ihn selbst gesucht und gefunden, dass rabbitmq gibt u einfaches Skript zu erlang Knoten zu kommunizieren .. seine in sbin Ordner, in dem das Startskript für RabbitMQ ist located..so Sie im Grunde

./rabbitmqctl list_queues 

dies zeigen die Warteschlangen zusammen mit der Anzahl der Nachrichten an diesen Warteschlangen anstehenden ähnlich können Sie auch

sagen sagen kann,
./rabbitmqctl list_channels 
./rabbitmqctl list_connections 

usw. Für weitere Informationen können Sie here

5

-Update finden Sie unter: es scheint, dass die pika Implementierung von queue_declare (..) seit der mmalone sehr hilfreich Beitrag geändert hat.

In Python/Pika (v0.9.5) ist es immer noch möglich, die Warteschlangentiefe über Pika zu überprüfen, aber es erfordert einen etwas indirekteren Ansatz.

queue_declare (...) übergibt ein Methodenobjekt an seine Callback-Funktion, die Sie dann untersuchen können. Um zum Beispiel die Anzahl der Nachrichten und die Verbraucher in der Warteschlange 'myQueue' Namen zu überprüfen:

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) 

hoffe, das hilft, und gehen Sie bitte einfach auf mich, ich bin neu hier :-)

+0

channel.queue_declare gibt ein Objekt zurück, das die aktuelle Nachrichtenanzahl enthält. Wenn Sie also einen Rückruf vermeiden möchten, können Sie auch folgendermaßen auf die Nachrichtenanzahl zugreifen: myChannel.method.message_count – corford

10

Wenn Sie Möchten Sie dies in .NET tun, überprüfen Sie, welche Version der Client-Bibliothek Sie verwenden.

Ich verwende die 2.2.0 Version und ich musste BasicGet verwenden (Warteschlange, noAck).
In dieser Version der Bibliothek gibt QueueDeclare() nur eine Zeichenfolge zurück, die den Warteschlangennamen enthält.

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


Ich weiß von der 2.6.1 Version, QueueDeclare() gibt ein Objekt vom Typ QueueDeclareOk.

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


Alternativ können Sie auch über die Befehlszeile aufrufen:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues 

Und sehen Sie die folgende Ausgabe:

Eintrag Warteschlangen ...
Queuename 1
. ..erledigt.

HTH

6

ich Version 3.3.1 der .Net-Client-Bibliothek verwendet wird.

Ich verwende den folgenden, die zu Ralph Willgoss zweite Vorschlag sehr ähnlich ist, aber Sie können den Namen der Warteschlange als Argument liefern.

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

Sie können den Message Methode des IModel verwenden, hier dokumentiert

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: Ich weiß, das ist eine sehr alte Post, aber es ist die erste Google-Antwort, und ich hoffe, es wird helfen Menschen, die in Zukunft nach dieser Antwort suchen.

+0

Dies ist das erste Mal, dass ich dies erwähnt habe. Warum das?!! – Theyouthis

1

Mindestens ab RabbitMQ 3.3.5, können Sie ohne RabbitMQ Client-Bibliothek dies in einem C# -Programm tun, indem Sie die RabbitMQ Management HTTP API aufrufen:

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

Der Benutzername und das Passwort sind die gleichen wie diejenigen, Sie melden sich in der Benutzeroberfläche der RabbitMQ Management Console an.

Antwort wird ein JSON-String mit der Liste der Warteschlangen, einschließlich ihrer Botschaft zählt, unter anderen Eigenschaften. (Wenn Sie möchten, können Sie diese JSON in ein C# Objekt deserialisieren eine Bibliothek wie Json.NET verwenden.)

Die API-Dokumentation zusammen mit der RabbitMQ Management-Konsole installiert ist und auf diesem Server auf http://MY_RABBITMQ_SERVER:15672/api zur Verfügung.

1

meine kleine Schnipsel basierend auf Myydrralls' Antwort. Ich denke, wenn er Code in seiner Antwort hatte, hätte ich es viel schneller bemerkt.

Verwandte Themen