到目前为止,对于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")
答案 0 :(得分:0)
当我尝试重复使用该频道时,我遇到了奇怪的问题。我选择了多个频道。每种类型的生产者/消费者都使用iirc。
答案 1 :(得分:0)
每个频道不需要一个队列。您可以在同一通道上声明和使用多个队列。有关详细信息,请参阅this question。
在许多客户端库中,队列声明“RPC”操作不应与消耗“流”操作混合使用。在这种情况下,最好有两个通道:一个用于任何数量的RPC事务,如队列声明,删除,绑定创建等,以及一个用于任意数量的消耗。
我认为官方Python驱动程序正确处理这个问题,并且两者都不需要多个通道。
(非常粗略地和非确定地)对此进行测试,启动发布者向队列发送稳定的消息流,并在该队列上创建消费者的消费者,同时重复声明其他队列。如果一切运行良好,您的客户端可以很好地混合RPC和流操作。当然,客户关于这个主题的文档比这个测试更有权威。