Czy ktoś wie, czy istnieje sposób sprawdzenia liczby wiadomości w kolejce RabbitMQ z aplikacji klienckiej?Sprawdź rozmiar kolejki RabbitMQ od klienta
Używam biblioteki klienta .NET.
Czy ktoś wie, czy istnieje sposób sprawdzenia liczby wiadomości w kolejce RabbitMQ z aplikacji klienckiej?Sprawdź rozmiar kolejki RabbitMQ od klienta
Używam biblioteki klienta .NET.
Rzeczywiście można pobrać to za pośrednictwem klienta. Podczas wykonywania operacji queue_declare
RabbitMQ zwraca trzykrotną krotkę zawierającą (<queue name>, <message count>, <consumer count>)
. Argument passive
dla queue_declare pozwala sprawdzić, czy kolejka istnieje bez modyfikowania stanu serwera. Aby sprawdzić długość kolejki, można użyć opcji queue_declare
za pomocą opcji passive
. Nie jestem pewien .NET, ale w Pythonie to wygląda mniej więcej tak:
name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
Jestem 2 lata za późno, ale szukałem dla niego się i stwierdził, że RabbitMQ daje u prosty skrypt do komunikowania się węzłów Erlang .. jej w sbin folderu, w którym skrypt wywoławcza RabbitMQ jest located..so można w zasadzie powiedzieć
./rabbitmqctl list_queues
ten wyświetli kolejki wraz z liczbą wiadomości oczekujących na tych kolejek podobnie można również powiedzieć
./rabbitmqctl list_channels
./rabbitmqctl list_connections
itp Więcej informacji można znaleźć here
Aktualizacja: wydaje się, że pika realizacja queue_declare (..) zmieniła się od mmalone bardzo pomocne post.
W python/pika (v0.9.5) nadal można sprawdzić głębokość kolejki za pomocą pika, ale wymaga to nieco bardziej pośredniego podejścia.
queue_declare (...) przekazuje obiekt metody do swojej funkcji wywołania zwrotnego, którą można następnie sprawdzić. Na przykład, aby sprawdzić liczbę wiadomości i konsumentów w kolejce o nazwie '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)
Hope this helps, i przejdź łatwe na mnie, jestem tu nowy :-)
channel.queue_declare zwraca obiekt zawierający bieżącą liczbę wiadomości, więc jeśli chcesz uniknąć wywołania zwrotnego, możesz również uzyskać dostęp do wiadomości w następujący sposób: myChannel.method.message_count – corford
Jeśli chciałem to zrobić w .Net, sprawdź, której wersji biblioteki klienta używasz.
Używam wersji 2.2.0 i musiałem użyć BasicGet (queue, noAck).
W tej wersji biblioteki QueueDeclare() zwraca tylko ciąg zawierający nazwę kolejki.
BasicGetResult result = channel.BasicGet("QueueName", false);
uint count = result != null ? result.MessageCount : 0;
wiem od wersji 2.6.1, QueueDeclare() zwraca obiekt typu QueueDeclareOk.
QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;
Alternatywnie, można wywołać z linii poleceń:
<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues
I zobaczysz następujący wynik:
kolejki szczegóły ...
nazwa_kolejki 1
. ..Gotowe.
HTH
używam wersji 3.3.1 z .NET biblioteki klienta.
Używam następującego, który jest bardzo podobny do drugiej sugestii Ralpha Willgossa, ale możesz podać nazwę kolejki jako argument.
QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;
Można użyć metody MessageCount w IModel'S, udokumentowany tutaj
edit: wiem, że to bardzo stary post, ale jest to pierwsza odpowiedź google i mam nadzieję, że będzie pomóc ludziom szukającym tej odpowiedzi w przyszłości.
Po raz pierwszy widziałem to. Dlaczego?!! – Theyouthis
Przynajmniej jak z RabbitMQ 3.3.5, można to zrobić w programie C# bez biblioteki klienta RabbitMQ poprzez wywołanie API RabbitMQ Zarządzanie http:
// 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);
Nazwa użytkownika i hasło są takie same jak te, służy do logowania do interfejsu użytkownika konsoli zarządzania RabbitMQ.
Odpowiedź będzie ciągiem JSON z listą kolejek, w tym ich liczba wiadomości, wśród innych właściwości. (Jeśli chcesz, możesz deserializowania że JSON do obiektu C# przy użyciu biblioteki takich jak Json.NET.)
Dokumentacja API jest instalowany wraz z konsolą zarządzania RabbitMQ i powinny być dostępne na tym serwerze w http://MY_RABBITMQ_SERVER:15672/api.
Mój mały fragment oparty na odpowiedzi Myydralls. Myślę, że gdyby miał kod w swojej odpowiedzi, mógłbym to zauważyć znacznie szybciej.
public uint GetMessageCount(string queueName)
{
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
return channel.MessageCount(queueName);
}
}
To powinna być zaakceptowana odpowiedź, nawet jeśli pominął Basic.Get jako drugie źródło tej informacji. –
Co to jest chan tutaj i jak go zaimportować? – Kishan
To już nie jest najlepszy sposób na zrobienie tego. – Theyouthis