web-dev-qa-db-fra.com

Pourquoi ne pouvez-vous pas regarder les messages dans la file d'attente des lapins?

Si ma compréhension est correcte, vous ne pouvez pas réellement regarder les messages dans la file d'attente des lapins sans les enlever et les remettre. Il n'y a aucun moyen d'utiliser rabbitmqctl pour inspecter une file d'attente.

Dans certains contextes de débogage, il est très utile de connaître le contenu de la file d'attente. Y a-t-il un moyen d'obtenir les messages? Aussi, en quoi la conception de Rabbit rend-elle ce processus fastidieux?

36
archgoon

Je ne l'ai pas encore utilisé personnellement, mais j'ai vu le plug-in de gestion de RabbitMQ qui, je pense, vous permettait de surveiller la file d'attente.

http://www.rabbitmq.com/management.html

14
Error_404

Il existe une section "Obtenir les messages" pour chaque file d'attente de l'API de gestion. Cependant, cela entraîne la consommation du message et constitue donc une action destructive. Nous pouvons remettre en file d'attente ce message dans la file d'attente aux dépens du sacrifice de l'ordre des messages [pour les versions de rabbitmq <2.7.0].

Une alternative plus viable consisterait à utiliser le traceur firehose, http://www.rabbitmq.com/firehose.html [pour les versions de rabbitmq> 2.5]. Cela publie essentiellement le message dans un autre échange (amq.rabbitmq.trace) uniquement à des fins de débogage.

Voici une autre interface graphique écrite au-dessus de firehose pour une meilleure visibilité, http://www.rabbitmq.com/blog/2011/09/09/rabbitmq-tracing-a-ui-for-the-firehose/

25
Joseph

Vous pouvez certainement regarder le contenu d'une file d'attente dans RabbitMQ, ou n'importe quel courtier AMQP, d'ailleurs. Consommez des messages mais ne les reconnaissez pas. Une fois le canal fermé, les messages seront disponibles pour la consommation de vos «vrais» consommateurs. Gardez à l'esprit que cela pourrait affecter le classement des messages dans la file d'attente que vous inspectez.

De plus, le plugin de gestion Web proposé par RabbitMQ vous permet de visualiser le contenu des messages à partir de l'interface Web. Si vous essayez de déboguer votre système, c'est un outil très utile.

17
Brian Kelly

Ceci est vieux, mais juste pour ceux qui sont intéressés par ceci . En visitant la Queues, vous avez une liste de toutes les files d'attente du courtier.

 enter image description here

Appuyez sur une file d'attente et faites défiler pour trouver cette section

 enter image description here

L'option vraiment importante à définir ici est l'option Requeue. Si est défini sur Yes, cette opération consomme le message. Par conséquent, vous pouvez le lire, mais le remettre en file d'attente pour qu'il ne soit pas perdu. 

9
alkis

Vous pouvez les ranger d’abord avant de les envoyer à RabbitMQ. J'ai écrit un logiciel de mise en file d'attente des messages pour le faire. Départ http://qdb.io/

3
David Tinker

Il est possible d’obtenir un message sans accusé de réception, puis de le rejeter, cela ne le sortirait pas de la file d’attente ... Mais ce n’est pas implémenté dans l’outil de gestion.

De plus, le message est verrouillé jusqu'à ce qu'il soit publié, ce qui signifie qu'aucun autre consommateur ne peut le consommer avant d'être rejeté.

3
Patrick Sauts

Il n’ya aucun moyen sensé de regarder une file d’attente, mais peut-être que la surveillance de ce qui se passe est un substitut suffisant. Pour ce faire, vous devez implémenter un moniteur intermédiaire. Cela nécessite des clients coopérants: vous devez apprendre à tous les expéditeurs ou à tous les destinataires à utiliser un échange différent.

Supposons que vous souhaitiez contrôler les messages pour échanger "foo". Vous créez un échange (direct) nommé "foo-in" (ou autre), configurez "foo" comme échange alternatif pour "foo-in" et enseignez à tous vos expéditeurs d'envoyer leurs messages au "foo-in" échange au lieu de "foo".

Votre moniteur de file d'attente doit ensuite écouter "foo-in" et republier tous les messages sur "foo". Chaque fois que le moniteur ne tourne pas, rabbitmq les dirigera vers "foo" tout seul; la pénalité de performance pour cela est négligeable.

Ceci est une extension rabbitmq. Voir http://www.rabbitmq.com/ae.html pour plus de détails sur le fonctionnement des échanges alternatifs. Bien sûr, vous pouvez utiliser "foo" et "foo-out", respectivement, si cela est plus facile à faire dans votre configuration.

Contrôler une file d'attente spécifique (encore une fois: entrée de la file d'attente, pas sortie) est plus facile mais nécessite à nouveau de changer le client (ou le code qui crée vos files d'attente, si elles sont persistantes). Configurez un échange fan-out, liez-y la file d'attente du client, puis liez l'échange à la source de messages d'origine. Ceci est une autre extension de rabbitmq; voir http://www.rabbitmq.com/e2e.html . Votre moniteur doit simplement se connecter à cet échange et obtenir des copies de tous les messages envoyés à la file d'attente du client.

3
Matthias Urlichs

Vous pouvez cliquer d'abord sur le nom de la file d'attente dans la gestion Web et cliquer sur GetMessages pour obtenir votre message . Il affichera maintenant vos messages ici enter image description here

1
Debendra Dash

Vous pouvez utiliser le visualiseur de file d'attente ( https://www.queueviewer.com ). Cela nécessite que le plugin de gestion de RabbitMQ soit activé.

0
user568327