【问题标题】:Correlation_id in rabbitmqrabbitmq中的correlation_id
【发布时间】:2017-05-01 20:43:53
【问题描述】:

我正在查看一段在默认交换中使用 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'(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

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

【问题讨论】:

  • 你很可能需要在你的请求队列中添加一个绑定到新的交换。

标签: python rabbitmq pika


【解决方案1】:

如果您使用自定义交换器,则需要将绑定添加到您的队列。这适用于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')

您需要添加绑定的原因是您没有使用默认交换。默认交换会自动绑定到所有队列,因此您无需添加上述绑定即可使其工作。你可以阅读更多关于默认交换here的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2011-11-27
    • 2017-03-13
    • 2020-04-18
    • 2018-11-17
    相关资源
    最近更新 更多