Pergunta

Alguém sabe se existe uma maneira de verificar o número de mensagens em uma fila RabbitMQ de um aplicativo cliente?

Eu estou usando a biblioteca cliente .NET.

Foi útil?

Solução

Você realmente pode recuperar esta via o cliente. Quando executar uma operação RabbitMQ queue_declare retorna uma contendo três (<queue name>, <message count>, <consumer count>) tuplo. O argumento passive para queue_declare permite verificar se uma fila existente, sem modificar o estado do servidor. Assim você pode usar queue_declare com a opção passive para verificar fila de comprimento. Não tenho certeza NET, mas em Python que é algo como isto:

name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)

Outras dicas

Eu sou 2 anos de atraso, mas eu estava procurando por ele próprio e descobriu que RabbitMQ dá u script simples para se comunicar com erlang nodes..its em sbin pasta onde o script de partida para RabbitMQ é located..so você pode basicamente dizer

./rabbitmqctl list_queues

isso irá exibir as filas junto com a contagem de mensagens pendentes para essas filas Da mesma forma você também pode dizer

./rabbitmqctl list_channels
./rabbitmqctl list_connections

etc. Para mais informações você pode visitar aqui

Se você quiser fazer isso em .Net, verificar qual versão da biblioteca de cliente que você está usando.

Eu estou usando o 2.2.0 versão e eu tive que usar BasicGet (fila, Noack).
Nesta versão da Biblioteca QueueDeclare () retorna apenas uma string contendo o nome da fila.

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


Eu sei do 2.6.1 versão, QueueDeclare () retorna um objeto do tipo QueueDeclareOk.

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


Alternativamente, você pode chamar a partir da linha de comando:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues

E você vê o seguinte resultado:

A Lista filas ...
QueueName 1 | ... feito.

HTH

Eu estou usando a versão 3.3.1 da Biblioteca cliente .NET.

Eu uso o seguinte, que é muito semelhante ao Ralph Willgoss segunda sugestão, mas você pode fornecer o nome da fila como um argumento.

QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;

Update:. Parece que a implementação pika de queue_declare (..) mudou desde mmalone é pós muito útil

Em python / pika (v0.9.5) ainda é possível verificar a profundidade da fila via pika, mas requer uma abordagem um pouco mais indireta.

queue_declare (...) passa um objeto método em sua função de retorno de chamada, que você pode então inspecionar. Por exemplo, para verificar o número de mensagens e consumidores na fila 'myQueue' chamado:

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)

Espero que isso ajude, e por favor, vá fácil em mim, eu sou novo por aqui: -)

Você pode usar o método MessageCount do IModel, documentado aqui

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:. Eu sei que este é um post muito antiga, mas é a primeira resposta do Google, e eu espero que isso vai ajudar as pessoas que procuram esta resposta no futuro

meu pequeno trecho com base na resposta Myydrralls'. Eu acho que se ele tivesse código em sua resposta que eu poderia ter notado que muito mais rápido.

public uint GetMessageCount(string queueName)
{
    using (IConnection connection = factory.CreateConnection())
    using (IModel channel = connection.CreateModel())
    {
        return channel.MessageCount(queueName);
    }
}

Pelo menos a partir de RabbitMQ 3.3.5, você pode fazer isso em um programa C # sem qualquer biblioteca cliente RabbitMQ chamando a API de gerenciamento RabbitMQ 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);

O nome de usuário ea senha são os mesmos que você usa para entrar no interface do usuário do console de gerenciamento RabbitMQ.

Response será uma string JSON com a lista de filas, incluindo a sua contagem de mensagens, entre outras propriedades. (Se quiser, você pode desserializar que JSON em um objeto C # usando uma biblioteca como Json.NET . )

A documentação da API é instalado junto com o console de gerenciamento RabbitMQ e deve estar disponível no servidor em http: // MY_RABBITMQ_SERVER: 15672 / api .

Eu era capaz de obter o tamanho / profundidade de fila de programa de python. 1. usando py_rabbit

    from pyrabbit.api import Client
    cl = Client('10.111.123.54:15672', 'userid', 'password',5)
    depth = cl.get_queue_depth('vhost', 'queue_name')
  1. kombu [um pacote de python geralmente vem com a instalação de aipo]
conn = kombu.Connection('amqp://userid:password@10.111.123.54:5672/vhost')
conn.connect()
client = conn.get_manager()
queues = client.get_queues('vhost')
for queue in queues:
    if queue == queue_name:
    print("tasks waiting in queue:"+str(queue.get("messages_ready")))
    print("tasks currently running:"+str(queue.get("messages_unacknowledged")))

O endereço IP é apenas um exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top