MQ(消息隊列)學習


轉自: http://book.51cto.com/art/201502/466288.htm         為什么我們需要MQ?

而這就是MQ :一個高效的可嵌入庫,它解決了大部分應用程序需要解決的問題,變得在網絡上有良好的可伸縮性,而沒有多少成本。

具體做法是:

它在后台線程異步處理I/O。這些線程使用無鎖數據結構與應用程序線程進行通信,所以並發MQ 應用程序不再需要鎖、信號量,或其他等待狀態。

組件可以動態地來去自如,而MQ 會自動重新連接。這意味着你可以以任何順序啟動組件。你可以創建“面向服務的架構”(SOA),其中的服務可以在任何時間加入和離開網絡。

它根據需要自動對消息排隊。為此,它會智能地在對消息排隊之前,將消息盡可能地推進到接收者。

它有一個處理過滿隊列(稱為“高水位標志”)的方法。當隊列滿時,MQ 會自動阻止發件人,或丟棄消息,這取決於你正在做的是哪種消息傳遞(即所謂的“模式”)。

它可以讓你的應用程序通過任意傳輸協議來互相交流,這些協議可以是:TCP、多播、進程內、進程間。你不需要更改代碼以使用不同的傳輸工具。

它使用依賴於消息傳遞模式的不同策略,安全地處理速度慢/ 阻塞的讀取者。

它可以讓你采用多種模式,如請求- 應答和發布- 訂閱來將消息路由。這些模式是指你如何創建拓撲結構和網絡結構。

它可以讓你創建代理(proxy)來排隊、轉發,或通過一個調用來捕獲消息。代理可以降低網絡互聯的復雜性。

它使用在線路上的簡單組幀原封不動地傳遞整個消息。如果你寫了一個10KB 的消息,那么你將收到一個10KB 的消息。

它不對消息強加任何格式。它們是零字節到千兆字節的二進制大對象。當你想表示你的數據時,可以選擇其上的其他一些產品,如谷歌的協議緩沖區、XDR 等。

它能智能地處理網絡錯誤。有時候它會重試,有時它會告訴你某個操作失敗。

它可以減少你的能源消耗。少花CPU 多辦事意味着使用電腦更少的能源,你可以讓你的舊電腦使用更長的時間。戈爾(譯者注:美國前副總統,環保主義者)也會愛上MQ 的。

      實際上,MQ 做的比這更多。它對你如何開發網絡功能的應用程序有顛覆性的影響。從表面上看,這是一個在其上做zmq_msg_recv() 和zmq_msg_send() 的套接字風格的API。但該消息處理循環迅速成為中心循環,而你的應用程序很快就會分解成一組消息處理任務。它是優雅和自然的。而且,它可擴展:每個任務 對應一個節點,節點通過任意傳輸方式互相交談。在一個進程中的兩個節點(節點是一個線程),在一台電腦中的兩個節點(節點是一個進程),或一個網絡上的兩 台電腦(節點是一台電腦),所有的處理方式都是相同的,不需要更改應用程序代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM