2016-02-10 90 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和流操作。當然,客戶關於這個主題的文檔比這個測試有更好的權威性。