Sprawdź rozmiar kolejki RabbitMQ z poziomu klienta

Czy ktoś wie czy jest sposób na sprawdzenie ilości wiadomości w kolejce RabbitMQ z aplikacji klienckiej?

Używam biblioteki klienta. NET.

Author: Prof. Falken, 2009-06-24

8 answers

Możesz to pobrać za pośrednictwem klienta. Po wykonaniu operacji queue_declare RabbitMQ zwraca trzy krotki zawierające (<queue name>, <message count>, <consumer count>). Argument passive to queue_declare pozwala sprawdzić, czy kolejka istnieje bez modyfikowania stanu serwera. Możesz więc użyć queue_declare z opcją passive, aby sprawdzić długość kolejki. Nie jestem pewien co do. NET, ale w Pythonie wygląda to mniej więcej tak:

name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
 64
Author: mmalone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-04 01:37:37

Jestem 2 lata za późno, ale szukałem go sam i okazało się, że rabbitmq daje u prosty skrypt do komunikacji z węzłami erlang..its w folderze sbin gdzie skrypt startowy dla RabbitMQ jest located..so można w zasadzie powiedzieć

./rabbitmqctl list_queues

Wyświetli kolejki wraz z liczbą wiadomości oczekujących do tych kolejek podobnie można również powiedzieć

./rabbitmqctl list_channels
./rabbitmqctl list_connections

Itd. Aby uzyskać więcej informacji, odwiedź tutaj

 10
Author: Rafi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-22 16:46:21

Jeśli chcesz to zrobić w. Net, sprawdź, której wersji biblioteki klienta używasz.

Używam 2.2.0 wersja i musiałem użyć BasicGet (Kolejka, noAck).
W tej wersji biblioteki funkcja QueueDeclare () zwraca tylko łańcuch zawierający nazwę kolejki.

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


Wiem z 2.6.1 version, QueueDeclare () zwraca obiekt typu QueueDeclareOk.

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


Alternatywnie można wywołać z polecenia linia:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues

I widzisz następujące wyjście:

Lista kolejek...
QueueName 1
...załatwione.

HTH

 9
Author: Ralph Willgoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-04 14:24:21

Używam wersji 3.3.1 biblioteki klienta. Net.

Używam poniższej sugestii, która jest bardzo podobna 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;
 8
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-01 07:51:58

Aktualizacja: wygląda na to, że implementacja pika queue_declare (..) zmieniło się od bardzo pomocnego posta mmalone.

W Pythonie / 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 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)

Mam nadzieję, że to pomoże, i proszę, bądź dla mnie łagodny, Jestem tu nowy: -)

 5
Author: tohster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-24 18:21:30

Mój mały fragment na podstawie mojej odpowiedzi. Myślę, że gdyby miał kod w swojej odpowiedzi, zauważyłbym go znacznie szybciej.

public uint GetMessageCount(string queueName)
{
    using (IConnection connection = factory.CreateConnection())
    using (IModel channel = connection.CreateModel())
    {
        return channel.MessageCount(queueName);
    }
}
 4
Author: William Haggerty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-09 18:06:36

Możesz użyć metody MessageCount Imodela, udokumentowanej tutaj

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: wiem, że to bardzo stary post, ale jest to pierwsza odpowiedź google i mam nadzieję, że pomoże ludziom szukającym tej odpowiedzi w przyszłości.

 3
Author: Myddraall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 16:50:50

W przeciwieństwie do innych bibliotek RabbitMQ, które nie posiadają biblioteki klienckiej RabbitMQ, można to zrobić w programie C#, wywołując HTTP API zarządzania 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);

Nazwa użytkownika i hasło są takie same jak te, których używasz do logowania się do interfejsu użytkownika konsoli zarządzania RabbitMQ.

Odpowiedź

Będzie ciągiem JSON z listą kolejek, w tym ich liczbą wiadomości, wśród innych właściwości. (Jeśli chcesz, możesz deserializować ten JSON do obiektu C# za pomocą biblioteki takiej jak Json.NET.)

Dokumentacja API jest instalowana wraz z konsolą zarządzania RabbitMQ i powinna być dostępna na tym serwerze pod adresem http://MY_RABBITMQ_SERVER:15672/api .

 2
Author: Jon Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-28 03:05:25