2017-05-01 1 views
1

Ich schaute auf ein Stück Code, der Callback_queue mit correlation_id auf Standardaustausch verwendet. Aber als ich versuchte, es in eine benutzerdefinierte Exchange zu ändern, bekomme ich keine Antwort auf diese Warteschlange zurück. Um es zu testen, habe ich dieses sehr einfache Beispiel aus https://www.rabbitmq.com/tutorials/tutorial-six-python.html versucht, und ich fand, wenn ich einen Austausch anders als Standard verwende, bekomme ich keine Antwort. Bitte lassen Sie mich wissen, ob ich noch etwas tun sollte. DankCorrelation_id in 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) 

Wenn ich meinen Austausch ändern = ‚test‘ ‚= auszutauschen‘ (Test der Austausch ich erstellt) in den Skripten, bemerkte ich die Verbraucher nur sits..If I Standard verwenden erhalte ich eine Antwort zurück ..

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

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

ich sah auch bei correlationId and temporary queues in RPC model - AMQP

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

+0

Sie müssen wahrscheinlich eine Bindung in Ihre Anforderungswarteschlange zum neuen Austausch hinzufügen. – eandersson

Antwort

1

Sie müssen Bindungen Ihre Warteschlangen hinzufügen, wenn Sie eine benutzerdefinierte verwenden austauschen. Dies gilt sowohl für die rpc_queue als auch für die Antwortwarteschlange (z. B. amq.gen-xxx).

Im rpc_client.py Beispiel von RabbitMQ fügen Sie queue_bind nach result.method.queue hinzu.

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

Im rpc_server.py Beispiel hinzufügen queue_bind nach queue_declare.

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

Der Grund, warum Sie eine Bindung hinzufügen müssen, ist, weil Sie nicht den Standardaustausch verwenden. Der Standardaustausch bindet automatisch an alle Warteschlangen, sodass Sie die obigen Bindungen nicht hinzufügen müssen, damit er funktioniert. Sie können mehr über den Standardaustausch here lesen.

+1

Das hat den Trick gemacht :) – jramacha