我看了一段代码,它在默认交换中使用callback_queue和correlation_id。但是,当我试图将其更改为用户定义的exchange时,不会在队列中得到任何回复。为了测试它,我尝试了https://www.rabbitmq.com/tutorials/tutorial-six-python.html中的这个非常简单的例子,我发现如果我使用的不是默认的exchange,我就得不到任何答复。如果我还需要做什么请告诉我。谢谢
../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)如果我在脚本中将exchange =‘exchange=’test‘更改为exchange='test'(test是我创建的exchange),我注意到使用者只是我使用默认的sits..If,我得到一个回复。
../rabbitmq $ ./rpc_server.py
[x] Awaiting RPC requests
../rabbitmq $ ./rpc_client.py 1
(' [x] Requesting fib%s', '1')发布于 2017-05-03 04:28:45
如果使用自定义交换,则需要向队列添加绑定。这既适用于rpc_queue,也适用于应答队列(例如amq.gen-xxx)。
在来自rpc_client.py的RabbitMQ示例中,在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')您需要添加绑定的原因是您没有使用默认的exchange。默认exchange自动绑定到所有队列,因此不需要添加上述绑定才能工作。您可以阅读更多关于默认exchange 这里的信息。
https://stackoverflow.com/questions/43726252
复制相似问题