2017-05-01 1 views
1

Je regardais un morceau de code qui utilise callback_queue avec correlation_id sur l'échange par défaut. Mais quand j'ai essayé de le changer en un échange défini par l'utilisateur, je ne reçois aucune réponse sur cette file d'attente. Pour le tester j'ai essayé cet exemple très simple de https://www.rabbitmq.com/tutorials/tutorial-six-python.html et j'ai trouvé que si j'utilise un échange autre que le défaut je n'obtiens aucune réponse. S'il vous plaît laissez-moi savoir s'il y a autre chose que je devrais faire. MerciCorrelation_id dans rabbitmq

../rabbitmq $ ./rpc_client.py 1 
    (' [x] Requesting fib%s', '1') 
    [.] Got 1 

    ../rabbitmq $ ./rpc_client.py 19 
    (' [x] Requesting fib%s', '19') 


    .../rabbitmq $ ./rpc_server.py 
[x] Awaiting RPC requests 
[.] fib(1) 
[.] fib(19) 

Si je change mon échange = « » pour échanger = « test » (test est l'échange que j'ai créé) dans les scripts, j'ai remarqué le consommateur juste sits..If j'utilise par défaut je reçois une réponse retour ..

../rabbitmq $ ./rpc_server.py 
[x] Awaiting RPC requests 

../rabbitmq $ ./rpc_client.py 1 
(' [x] Requesting fib%s', '1') 

J'ai aussi regardé correlationId and temporary queues in RPC model - AMQP

et https://github.com/eandersson/python-rabbitmq-examples/blob/master/Flask-examples/pika_async_rpc_example.py

+0

Vous avez probablement besoin d'ajouter une liaison dans votre file d'attente de demandes au nouvel échange. – eandersson

Répondre

1

vous devrez ajouter des liaisons à vos files d'attente si vous utilisez une coutume échange. Cela s'applique à la fois à rpc_queue et à la file d'attente de réponses (par exemple, amq.gen-xxx).

Dans l'exemple rpc_client.py de RabbitMQ ajouter queue_bind après result.method.queue.

self.channel.queue_bind(self.callback_queue, 'test', self.callback_queue) 

Dans l'exemple rpc_server.py ajouter queue_bind après queue_declare.

channel.queue_bind('rpc_queue', 'test', 'rpc_queue') 

La raison pour laquelle vous devez ajouter une liaison est que vous n'utilisez pas l'échange par défaut. L'échange par défaut se lie automatiquement à toutes les files d'attente, vous n'avez donc pas besoin d'ajouter les liaisons ci-dessus pour que cela fonctionne. Vous pouvez en savoir plus sur l'échange par défaut here.

+1

Cela a fait l'affaire :) – jramacha