一个通道 - RabbitMQ中的一个队列?

时间:2016-02-10 10:16:22

标签: python rabbitmq

到目前为止,对于RabbitMQ中的单个队列,我使用了单个通道 但是现在我有多个动态创建的队列,所以我必须为每个队列创建频道,或者一个频道可以从/向不同队列接收/发送消息?

   # consuming
    for ch in items:
      channel1 = rconn.channel()
      channel1.queue_declare(queue=itm)
      channel1.basic_consume(some_callback, queue=itm, no_ack=True)
      channel1.start_consuming()


    # publishing
    for ch in items:
    # ....
      channel1.basic_publish(exchange="", routing_key=itm, body="fdsfds")

2 个答案:

答案 0 :(得分:0)

当我尝试重复使用该频道时,我遇到了奇怪的问题。我选择了多个频道。每种类型的生产者/消费者都使用iirc。

答案 1 :(得分:0)

每个频道不需要一个队列。您可以在同一通道上声明和使用多个队列。有关详细信息,请参阅this question

在许多客户端库中,队列声明“RPC”操作不应与消耗“流”操作混合使用。在这种情况下,最好有两个通道:一个用于任何数量的RPC事务,如队列声明,删除,绑定创建等,以及一个用于任意数量的消耗。

我认为官方Python驱动程序正确处理这个问题,并且两者都不需要多个通道。

(非常粗略地和非确定地)对此进行测试,启动发布者向队列发送稳定的消息流,并在该队列上创建消费者的消费者,同时重复声明其他队列。如果一切运行良好,您的客户端可以很好地混合RPC和流操作。当然,客户关于这个主题的文档比这个测试更有权威。