消息隊列ZeroMQ

消息隊列概念

消息隊列技術是分佈式應用間交換信息的一種技術。消息隊列能夠駐留在內存或者磁盤上,隊列存儲消息直到它們被應用程序讀走。經過消息隊列,應用程序能夠獨立的執行,它們不須要知道彼此的位置,或者在繼續執行前不須要等待接受程序接收此消息。html

消息隊列相關的概念有:node

  1. 消息(Message)
    消息是MQ中最小的概念,本質上就是一段數據,它能被一個或者多個應用程序所理解,是應用程序之間傳遞的信息載體。
  2. 隊列(Queue)
    1. 本地隊列

      本地隊列按照功能可劃分爲初始化隊列,傳輸隊列,目標隊列和死信隊列。數據庫

      初始化隊列用做消息觸發功能。服務器

      傳輸隊列只是暫存待傳的消息,條件許可的狀況下,經過管道將消息傳送到其餘的隊列管理器。網絡

      目標隊列是消息的目的地,能夠長期存放消息。異步

      若是消息不能送達目標隊列,也不能再路由出去,則被自動放入死信隊列保存。socket

    2. 別名隊列&遠程隊列
      用來指定遠端隊列管理器的隊列。使用了遠程隊列,程序就不須要知道目標隊列的位置。
    3. 模型隊列
      模型隊列定義了一套本地隊列的屬性結合,一旦打開模型隊列,隊列管理器會按照這些屬性動態地建立出一個本地隊列。
  3. 隊列管理器(Queue Manager)
    隊列管理器是一個負責嚮應用程序提供消息服務的機構,若是把隊列管理器比做數據庫,那麼隊列就是其中一張表。
  4. 通道(Channel)
    通道是兩個管理器之間的一種單向點對點的的通訊鏈接,若是須要雙向交流,能夠創建一對通道。

消息隊列的主要特色是鬆耦合。尤爲是分佈式環境下的應用程序,若是須要進行數據的交換,須要結合主機間和主機內部進程間的通訊知識,編寫大量的代碼,和應用程序自己牢牢耦合在一塊兒,此外,還要面對應用所在的不一樣環境的差別。而有了消息隊列中間件,分佈式環境下的數據傳輸和交換工做就徹底移交給了消息隊列中間件,並讓他來確保數據傳輸的可靠性,此外還提供獨有的異步傳輸機制,便於和異步事務處理的應用整合。分佈式

消息隊列的特色有:函數

  1. 可靠傳輸:消息中間件確保不一樣環境下數據傳輸不丟失
  2. 不重複傳輸:斷點續傳
  3. 異步傳輸:發送和接收方沒必要同時在線
  4. 消息驅動:主動通知消息給接收方
  5. 支持事務

消息隊列適用的場景有:學習

  1. 消息通道:客戶端和服務器端創建一條通道,完成數據的可靠交互
  2. 消息總線:經過服務總線將不一樣服務串聯起來,完成不一樣服務間的數據傳輸
  3. 消息路由:根據指定的規則將不一樣的消息路由到不一樣的隊列中去
  4. 發佈訂閱:消息發佈者向一個Topic發送一條消息後,全部的訂閱者都會接收到它

ZeroMQ

ZeroMQ(ZMQ)號稱史上最快中間件。它對socket通訊進行了封裝,使得咱們不須要寫一行socket函數調用就能完成複雜的網絡通訊。和通常意義上的消息隊列產品不一樣的是,它沒有消息隊列服務器,而更像是一個網絡通訊庫。使用它可以輕鬆的完成多個node之間的傳輸。

ZMQ有三個基本通訊模型:

  1. 請求應答(Request-Reply): client端發起請求,server端響應請求
  2. 發佈訂閱(Publisher-Subscriber):發佈者發佈指定主題的消息,訂閱端訂閱感興趣的主題

  3. Parallel Pipeline: 消息通過分發到各個節點,處理以後再進行彙總

參考資料:

【MQ消息隊列】:http://blog.csdn.net/wxyfighting/article/details/8866437

ZeroMQ的學習和研究】:http://www.searchtb.com/2012/08/zeromq-primer.html

【ZMQ官網】:http://zeromq.org

相關文章
相關標籤/搜索