我正在查看一段在默认交换上使用带有correlation_id的callback_queue的代码。但是,当我尝试将其更改为用户定义的交换时,我没有在该队列上收到任何回复。为了测试它,我尝试了 https://www.rabbitmq.com/tutorials/tutorial-six-python.html 中的这个非常简单的示例我发现如果我使用默认以外的交换,我不会得到任何回复。如果还有什么我应该做的,请告诉我。谢谢
../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)
如果我在脚本中将交换=''更改为交换='测试'(测试是我创建的交换),我注意到消费者只是坐着。如果我使用默认值,我会得到回复..
../rabbitmq $ ./rpc_server.py
[x] Awaiting RPC requests
../rabbitmq $ ./rpc_client.py 1
(' [x] Requesting fib%s', '1')
最佳答案
如果您使用自定义交换器,则需要将绑定(bind)添加到队列。这适用于 rpc_queue 和回复队列(例如 amq.gen-xxx)。
在 RabbitMQ 的 rpc_client.py
示例中在 result.method.queue
之后添加 queue_bind
。
self.channel.queue_bind(self.callback_queue, 'test', self.callback_queue)
在rpc_server.py
示例中,在queue_declare
之后添加queue_bind
。
channel.queue_bind('rpc_queue', 'test', 'rpc_queue')
您需要添加绑定(bind)的原因是因为您没有使用默认交换。默认交换器会自动绑定(bind)到所有队列,因此您无需添加上述绑定(bind)即可使其工作。您可以阅读有关默认交易所的更多信息here .
关于python - rabbitmq中的correlation_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43726252/