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

Python RabbitMQ中的一个通道-一个队列?,python,rabbitmq,Python,Rabbitmq,到目前为止,对于RabbitMQ中的单个队列,我使用了单个通道 但是现在我动态创建了多个队列,那么我是否必须为每个队列创建一个新的通道,或者一个通道可以从不同的队列接收/发送消息 # consuming for ch in items: channel1 = rconn.channel() channel1.queue_declare(queue=itm) channel1.basic_consume(some_callback, queue=i

到目前为止,对于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")

当我试图重新使用这个频道时,我遇到了一些奇怪的问题。我会选择多个频道。每种类型的生产者/消费者都有一个队列,这就是我使用iirc的结果。

每个频道不需要有一个队列。您可以从同一通道上的多个队列中声明和使用。有关更多信息,请参阅

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

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


要(非常粗略且不确定地)测试这一点,请在某处启动发布服务器,向队列发送稳定的消息流,并在该队列上创建一个消费者,该消费者在重复声明其他队列的同时使用消息。如果一切都能正常工作一段时间,那么您的客户机可以很好地混合RPC和流操作。当然,客户关于这个主题的文档比这个测试更有权威性。

你能给我看一下代码吗?因为当我调用“start_consuming()”时,它会进入一个无限循环,所以我如何设置多个通道呢?为了澄清,我在一个应用程序中有不同类型的消息处理器,我试图维持一个单一的渠道,并在消费者和粉丝之间分享。这是几年前的事:)对不起,这无助于我理解如何做到这一点。你的意思是多个消费者可以使用同一渠道使用来自多个队列的消息?