web-dev-qa-db-fra.com

RabbitMQ - Obtenez le nombre total de messages mis en file d'attente

J'ai un client Java qui surveille la file d'attente RabbitMQ. Je peux obtenir le nombre de messages actuellement en file d'attente avec ce code

@Resource
RabbitAdmin rabbitAdmin;
..........

DeclareOk declareOk = rabbitAdmin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() {
        public DeclareOk doInRabbit(Channel channel) throws Exception {
            return channel.queueDeclarePassive("test.pending");
        }
    });
     return declareOk.getMessageCount();

Je veux obtenir plus de détails supplémentaires comme -

  1. Corps du message des éléments actuellement mis en file d'attente.
  2. Nombre total de messages mis en file d'attente dans la file d'attente depuis la création de la file d'attente.

Existe-t-il un moyen de récupérer ces données dans le client Java?

14
Code Geass

Avec le protocole AMQP (y compris la mise en œuvre de RabbitMQ), vous ne pouvez pas obtenir de telles informations avec une garantie à 100%.

Le nombre le plus proche du nombre de messages est le nombre de messages renvoyés avec queue.declare-ok ( AMQP.Queue.DeclareOk dans Java AMQP).

Alors que les messages comptent, vous recevez avec queue.declare-ok peut correspondre au nombre exact de files d'attente de messages, vous ne pouvez pas vous y fier car il ne compte pas les messages en attente de reconnaissance ou publiés dans la file d'attente pendant la transaction mais pas encore validés.

Cela dépend vraiment du type de précision dont vous avez besoin.

En ce qui concerne le corps des messages mis en file d'attente, vous souhaiterez peut-être extraire manuellement tous les messages dans la file d'attente, afficher leur corps et les remettre dans la file d'attente. C'est la seule façon de faire ce que vous voulez.

Vous pouvez obtenir des informations sur le nombre de messages avec Plugin de gestion , API HTTP de gestion RabbitMQ et rabbitmqctl util (voir list_queues, list_channels).

Vous ne pouvez pas obtenir le nombre total de messages publiés depuis la création de la file d'attente et je pense que personne n'implémente de telles statistiques tant qu'elles sont inutiles (pour info, avec des flux de messages en moyenne de 10 000 par seconde, vous n'atteindrez même pas uint64 dans quelques milliers d'années).

13
pinepain
AMQP.Queue.DeclareOk dok = channel.queueDeclare(QUEUE_NAME, true, false, false, queueArgs);
dok.getMessageCount();
8
Giumbix

Pour accéder aux détails de la file d'attente via http api,

http://public-domain-name:15672/api/queues/%2f/queue_name

Pour accéder aux détails de la file d'attente via la commande de localhost cli promt,

curl -i -u guest_uname:guest_password http://localhost:15672/api/queues/%2f/queue_name

Où,% 2f est l'hôte par défaut "/"

5
Hemant Thorat