Weiß jemand, ob es eine Möglichkeit gibt, die Anzahl der Nachrichten in einer RabbitMQ-Warteschlange aus einer Clientanwendung zu überprüfen?Überprüfen RabbitMQ-Warteschlangengröße von Client
Ich verwende die .NET-Client-Bibliothek.
Weiß jemand, ob es eine Möglichkeit gibt, die Anzahl der Nachrichten in einer RabbitMQ-Warteschlange aus einer Clientanwendung zu überprüfen?Überprüfen RabbitMQ-Warteschlangengröße von Client
Ich verwende die .NET-Client-Bibliothek.
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)
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
-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 :-)
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
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
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;
Sie können den Message Methode des IModel verwenden, hier dokumentiert
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.
Dies ist das erste Mal, dass ich dies erwähnt habe. Warum das?!! – Theyouthis
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.
meine kleine Schnipsel basierend auf Myydrralls' Antwort. Ich denke, wenn er Code in seiner Antwort hatte, hätte ich es viel schneller bemerkt.
Dies sollte die akzeptierte Antwort sein, auch wenn er Basic.Get als zweite Quelle dieser Info verpassen. –
Was ist hier und wie importiert man es? – Kishan
Das ist nicht mehr der beste Weg, es zu tun. – Theyouthis