2016-02-10 87 views
0

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

回答

1

我试图重复使用该通道时出现了奇怪的问题。我会去多个渠道。每种类型的生产者/消费者都是我使用iirc结束的。

+0

你能告诉我代码吗?因为当我调用“start_consuming()”时,它会进入一个无限循环,因此应如何设置多个通道? –

+0

为了澄清,我在应用程序中使用了不同类型的消息处理器,并且我试图维护单个通道并在消费者和用来击中粉丝的内容之间共享它。这是几年回来:) – JVXR

+0

对不起,这不会帮助我了解如何做到这一点。 –

0

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

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

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

为了(非常粗略地和非确定性地)测试这一点,启动一个发布器,将稳定的消息流发送到队列,并在该队列上创建一个使用消息的消费者,同时重复声明其他队列。如果一切正常运行一段时间,您的客户端就很好地混合RPC和流操作。当然,客户关于这个主题的文档比这个测试有更好的权威性。