web-dev-qa-db-fra.com

L'utilisation de rabbitmq est une façon de regarder le contenu de la file d'attente sans une opération de dequeuse?

Comme un moyen d'apprendre rabbitmq et python Je travaille sur un projet qui me permet de distribuer des codes H264 entre un certain nombre d'ordinateurs. Les bases sont terminées, j'ai un démon qui fonctionne sous Linux Ou Mac qui se fixe à la file d'attente, accepte les travaux et les code à l'aide de Handbrakecli et d'ACKS Le message une fois que l'encodage est terminé. J'ai également construit un outil simple pour pousser les éléments dans la file d'attente.

Maintenant, je souhaite élargir les capacités de l'outil qui pousse les éléments dans la file d'attente afin que je puisse voir ce qui est dans la file d'attente. Je suis conscient de la capacité de voir combien d'articles sont dans la file d'attente, mais je souhaite pouvoir obtenir les messages réels afin que je puisse montrer quel spectacle de film ou de télévision attend d'être codé à ce jour. L'idée est que le gestionnaire de files d'attente recevrait des messages des clients du codeur lorsqu'un emploi a terminé, puis rafraîchissez la liste des file d'attente.

Je sais qu'il existe une manière convoluée de conserver la liste du gestionnaire de files d'attente avec la file d'attente de travail réelle, mais j'aimerais que cela soit "persistant" en ce que je devrais être capable de fermer le gestionnaire de files d'attente et de la rouvrir plus tard pour voir la file d'attente .

42
Dustin

La navigation de la file 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 que vous ne recevez pas les messages que vous recevez, vous pouvez tout voir. Une fois que vous avez eu un look, envoyez une annulation sur la chaîne, ou déconnectez-vous et reconnectez-vous pour que tous les messages soient requis. Cela incrémente un nombre dans les en-têtes de message, mais laisse sinon les messages intacts.

J'ai construit une application où la commande de message n'était pas terriblement importante et j'ai fréquemment scanné à travers la file d'attente de cette manière. Si j'ai trouvé un problème, je vais jeter les messages dans un fichier, les réparer et resoumettre.

Si vous n'avez besoin que de jeter un coup d'œil sur un message ou deux fois de temps en temps, vous pouvez le faire avec le plugin de gestion de lapbitmq.

De plus, si vous n'avez besoin que d'un nombre de messages, vous pouvez obtenir cela chaque fois que vous déclarez la file d'attente ou sur une commande basique.get.

39
Michael Dillon

@Michaeldillon basé sur votre réponse pour rendre la vie des autres plus facile Je mettez ici un exemple ici:

#!/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()
3
Tomasz

Ce que vous voulez faire est appelé Navigation La file d'attente, bien que je reçois de - ceci que Rabbitmq ne supporte pas encore cela.

0
Lee at NCR