Correlation_id 在 rabbitmq 中
Correlation_id in rabbitmq
我正在查看一段在默认交换中使用 callback_queue 和 correlation_id 的代码。但是当我试图将它更改为用户定义的交换时,我没有在该队列上得到任何回复。为了测试它,我尝试了 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)
如果我在脚本中将 exchange='' 更改为 exchange='test'(测试是我创建的交换),我注意到消费者只是坐着..如果我使用默认值,我会得到回复..
../rabbitmq $ ./rpc_server.py
[x] Awaiting RPC requests
../rabbitmq $ ./rpc_client.py 1
(' [x] Requesting fib%s', '1')
我也看了correlationId and temporary queues in RPC model - AMQP
如果您使用的是自定义交换器,则需要将绑定添加到您的队列中。这适用于 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')
您需要添加绑定的原因是您没有使用默认交换。默认交换器自动绑定到所有队列,因此您无需添加上述绑定即可工作。您可以阅读有关默认交换的更多信息 here.
我正在查看一段在默认交换中使用 callback_queue 和 correlation_id 的代码。但是当我试图将它更改为用户定义的交换时,我没有在该队列上得到任何回复。为了测试它,我尝试了 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)
如果我在脚本中将 exchange='' 更改为 exchange='test'(测试是我创建的交换),我注意到消费者只是坐着..如果我使用默认值,我会得到回复..
../rabbitmq $ ./rpc_server.py
[x] Awaiting RPC requests
../rabbitmq $ ./rpc_client.py 1
(' [x] Requesting fib%s', '1')
我也看了correlationId and temporary queues in RPC model - AMQP
如果您使用的是自定义交换器,则需要将绑定添加到您的队列中。这适用于 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')
您需要添加绑定的原因是您没有使用默认交换。默认交换器自动绑定到所有队列,因此您无需添加上述绑定即可工作。您可以阅读有关默认交换的更多信息 here.