2017-06-04 66 views
4

我在Node.js中使用amqplib,我不清楚我的代碼中的最佳實踐。每次發佈後我應該關閉頻道/連接嗎?

基本上,我當前的代碼在節點服務器啓動時調用amqp.connect(),然後爲每個生產者和每個消費者使用不同的渠道,從不實際關閉它們中的任何一個。我想知道這是否有意義,或者我應該創建頻道,每次發佈消息時發佈並關閉它。那麼連接呢?這是連接一次的「良好做法」,然後在服務器的整個生命週期中保持打開狀態?
在消費者方面 - 我可以使用單個連接和單個通道來偵聽多個隊列嗎?

謝謝你的任何澄清

回答

9

一般來說,這不是一個很好的做法,打開和關閉連接,每個消息通道。連接長期存在,需要資源來持續打開和關閉它們。對於頻道,它們與連接共享TCP連接,因此它們更輕量,但它們仍會佔用內存,並且在完成使用後肯定不應該保持打開狀態。

建議每個線程有一個頻道,每個用戶有一個頻道。但對於發佈,使用相同頻道完全可以。但要記住的是,取決於操作,協議可能殺死在某些情況下(例如,隊列存在檢查)的信道,所以該準備。還有軟(可配置)和硬(通常65535)上的許多客戶端的實現對信道的最大數量的限制。

所以總結起來,這取決於你的使用情況用一到幾個連接,完成時,當你需要他們,當它是有道理的共享,但是要記住開啓的通道將其關閉。

的RabbitMQ的documentation解釋了連接和信道(文件結束)的性質。而就this問題接受的答案有關於這個問題的好信息。

相關問題