python - rabbitmq中的correlation_id

标签 python rabbitmq pika

我正在查看一段在默认交换上使用带有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')

我还查看了correlationId and temporary queues in RPC model - AMQP

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

最佳答案

如果您使用自定义交换器,则需要将绑定(bind)添加到队列。这适用于 rpc_queue 和回复队列(例如 amq.gen-xxx)。

RabbitMQrpc_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/

相关文章:

python - 将sqlite PRAGMA信息的输出解析为python列表

rabbitmq - Spring AMQP : Message Priority not working working

jms - openwire vs amqp,哪个性能更好

rabbitmq - 在 pika/RabbitMQ 中处理长时间运行的任务

python - 如何在 Pika 中同时运行消费者和发布者?

python - Pandas 多索引 : Divide all columns by one column

Python 套接字,高级聊天框

javascript - 如何交互式地显示和隐藏 Bokeh 图中的线条?

java - 消息队列和命令队列类似吗?

Python ActiveMQ : Is it possible to use pika client to work on ActiveMQ?