MQ(消息隊列)學習

轉自: http://book.51cto.com/art/201502/466288.htm         爲何咱們須要MQ?安全

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

具體作法是:數據結構

它在後臺線程異步處理I/O。這些線程使用無鎖數據結構與應用程序線程進行通訊,因此併發MQ 應用程序再也不須要鎖、信號量,或其餘等待狀態。架構

組件能夠動態地來去自如,而MQ 會自動從新鏈接。這意味着你能夠以任何順序啓動組件。你能夠建立「面向服務的架構」(SOA),其中的服務能夠在任什麼時候間加入和離開網絡。併發

它根據須要自動對消息排隊。爲此,它會智能地在對消息排隊以前,將消息儘量地推動到接收者。異步

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

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

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

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

它可讓你建立代理(proxy)來排隊、轉發,或經過一個調用來捕獲消息。代理能夠下降網絡互聯的複雜性。

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

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

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

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

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

相關文章
相關標籤/搜索