Utiliser RabbitMQ est-il possible de regarder le contenu de la file d'attente sans une dequeue?
Pour apprendre RabbitMQ et python, je travaille sur un projet qui me permet de distribuer des encodages h264 entre un certain nombre d'ordinateurs. Les bases sont faites, j'ai un démon qui fonctionne sur Linux ou Mac qui s'attache à la file d'attente, accepte les travaux et les encode en utilisant HandBrakeCLI et acks le message Une fois l'encodage terminé. J'ai également construit un outil simple pour pousser des éléments dans la file d'attente.
Maintenant, je veux étendre les capacités de l'outil qui pousse des éléments dans la file d'attente afin que je pouvez voir ce qui est dans la file d'attente. Je suis conscient de la possibilité de voir combien d'éléments sont dans la file d'attente, mais je veux être en mesure d'obtenir les messages réels afin que je puisse montrer quel film ou émission de télévision attend d'être encodé encore. L'idée est que le gestionnaire de files d'attente recevrait des messages des clients de l'encodeur lorsqu'un travail est terminé, puis actualiserait la liste de files d'attente.
Je sais qu'il existe une manière alambiquée de synchroniser la liste du gestionnaire de files d'attente avec la file d'attente de travail réelle, mais j'aimerais que ce soit "persistant" en ce sens que je devrais pouvoir fermer le gestionnaire de files d'attente et le rouvrir plus tard pour voir la file d'attente.
3 réponses
La navigation dans les Files D'attente n'est pas prise en charge directement, mais si vous déclarez une file D'attente sans accusé de réception automatique et n'activez pas les messages que vous recevez,vous pouvez tout voir. Après avoir regardé, envoyez une annulation sur le canal, ou déconnectez-vous et reconnectez-vous pour que tous les messages soient requeued. Cela incrémente un nombre dans les en-têtes de message, mais laisse les messages intacts.
J'ai construit une application où la commande des messages n'était pas très importante, et je fréquemment scanné à travers la file d'attente de cette façon. Si j'ai trouvé un problème, je voudrais vider les messages dans un fichier, les corriger et resoumettre.
Si vous avez seulement besoin de regarder un message ou deux de temps en temps, vous pouvez le faire avec le plugin RabbitMQ management.
En outre, si vous avez seulement besoin d'un nombre de messages, Vous pouvez l'obtenir chaque fois que vous déclarez la file d'attente, ou sur une base.commande get.
@MichaelDillon basé sur votre réponse pour faciliter la vie des autres, je mets ici un exemple no_ack:
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='Q.hello')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
# ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_consume(callback, queue='Q.hello')
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
Ce que vous voulez faire s'appelle parcourir la file d'attente, bien que je suppose de CE Que RabbitMQ ne supporte pas encore cela.