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.
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)
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
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
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;
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: -)
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);
}
}
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
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.
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 .
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