2013-05-22 16 views
10

Używamy amqplib do publikowania/odbierania wiadomości. Chcę móc odczytać liczbę wiadomości w kolejce (najlepiej zarówno potwierdzonych, jak i niepotwierdzonych). Pozwoli mi to pokazać ładny diagram stanu użytkownikom adminów i wykryć, czy dany komponent nie nadąża za obciążeniem.Uzyskiwanie liczby wiadomości w kolejce RabbitMQ

Nie mogę znaleźć żadnych informacji w dokumentach amqplib dotyczących statusu kolejki czytania.

Czy ktoś może wskazać mi właściwy kierunek?

+1

Zaznacz tę odpowiedź http://stackoverflow.com/questions/8192584/get-queue-size-in-pika-amqp-python/13629296#13629296 – mike

+0

Dzięki @mike, w dużej mierze to zrobiłem, gdy musiałem ponownie wdrożyć niektóre z tego w C#. W przypadku podejścia Python trafiłem na plugin rabbitmq-admin i zamiast tego zapytałem. W każdym razie doceniam wskaźnik. – Basic

Odpowiedz

15

Korzystanie pika:

import pika 

pika_conn_params = pika.ConnectionParameters(
    host='localhost', port=5672, 
    credentials=pika.credentials.PlainCredentials('guest', 'guest'), 
) 
connection = pika.BlockingConnection(pika_conn_params) 
channel = connection.channel() 
queue = channel.queue_declare(
    queue="your_queue", durable=True, 
    exclusive=False, auto_delete=False 
) 

print(queue.method.message_count) 

Korzystanie PyRabbit:

from pyrabbit.api import Client 
cl = Client('localhost:55672', 'guest', 'guest') 
cl.get_messages('example_vhost', 'example_queue')[0]['message_count'] 

Korzystanie HTTP

Składnia:

curl -i -u user:password http://localhost:15672/api/queues/vhost/queue 

Przykład:

curl -i -u guest:guest http://localhost:15672/api/queues/%2f/celery   

Uwaga: Domyślny vhost jest / który musi być ocalałem jako %2f

Korzystanie CLI:

$ sudo rabbitmqctl list_queues | grep 'my_queue' 
+1

Wykryto rozwiązanie' PyRabbit' wiadomość z kolejki. Myślę, że chcesz zamiast tego użyć 'cl.get_queue (" example_vhost "," example_queue ") ['messages']. – Bill

0

Korzystanie z API Javy, można wykonać następujące czynności:

channel.queueDeclarePassive(queueName).getMessageCount() 

Wierzę, że to jest również dostępny z amqplib (według https://code.google.com/p/py-amqplib/source/browse/amqplib/client_0_8/channel.py#1356 wydaje się, że queue_declare() zwraca krotki z liczby wiadomości)

Jeśli potrzebujesz dokładniejszych danych (szczególnie nacków), musisz użyć rabbitmqctl lub rabbitmq_management. Rabbitmq_management jest prawdopodobnie dobrym wyborem ze względu na jego API HTTP. Więcej informacji: http://www.rabbitmq.com/management.html

+2

"P: Używanie Pythona jak to zrobić ..." - "A: Używanie Javy robisz ..." -> -1 – jsbueno

+0

od dzisiaj, 'Python' nie jest wymienione w OP – mkrufky

6

następujące odpowiedzią ChillarAnand ciebie można łatwo uzyskać wartość. dane znajdują się w obiekcie.

import pika 

connection = pika.BlockingConnection(pika.ConnectionParameters(
      host='localhost', 
      port=5672, 
      credentials=pika.credentials.PlainCredentials('guest', 'guest'), 
     ) 
channel = connection.channel() 
print(channel.queue_declare(queue="your_queue", durable=True, exclusive=False, 
        auto_delete=False).method.message_count) 

a otrzymasz dokładną liczbę wiadomość

Powiązane problemy