2016-12-27 3 views
0

Je suivant schéma de ma lourde tâche qui est exécutée dans c1, c2, c3 .. consommateurs (consommation 1ère file d'attente - file d'attente de tâches)RabbitMQ: Consommateur devient producteur - Connexion fermée erreur

enter image description here

Lorsque la tâche dans c1 ou c2 ou c3 est terminée, elle crée une autre connexion et un autre canal dans le rappel pour produire un autre cb_q. Je reçois l'erreur "Connection Closed" après que mon client a produit la tâche. Cependant je ne ferme pas la connexion de mon consommateur, mais je ferme la connexion du producteur. Les objets sont différents ..

Question:

  • Dois-je créer une connexion et un canal dans la tâche du consommateur Callback pour produire la tâche cb_q? Quelles sont les meilleures pratiques lorsque le consommateur devient producteur?

Répondre

0

J'ai un système similaire, où j'ai un « travailleur » qui consomme d'une file d'attente, traite les données et pousse le résultat sur une autre file d'attente

J'ai actuellement toutes les files d'attente qui vivent sur la même machine, donc je viens de réutiliser la connexion/canal que j'ai à cette machine, et j'utilise l'échange par défaut, en spécifiant simplement le nom de la file d'attente

Donc pour consommer mes instances c1/c2/c3 appelez:

channel.basic_consume(your_callback_function, queue=e1) 

Et pour pousser à la prochaine file d'attente, en utilisant le même canal qu'ils appellent:

channel.basic_publish(exchange='', 
        routing_key=cb_q, 
        properties=pika.BasicProperties(...), 
        body=message 
        ) 

Je n'ai pas joué avec les files d'attente sur les différentes machines qui nécessiteraient l'établissement d'une nouvelle connexion, mais nous espérons que cela aide, dans mon scénario ayant un «travailleur» à la fois consommateur et producteur est relativement simple