標籤:
ZeroMQ——一個輕量級的訊息通訊組件
ZeroMQ是一個輕量級的訊息通訊組件,儘管名字中包含了"MQ",嚴格上來講ZeroMQ並不是"訊息佇列/訊息中介軟體"。ZeroMQ是一個傳輸層API庫, 更關注訊息的傳輸。與訊息佇列相比,ZeroMQ有以下一些特點:
點對點無中間節點
傳統的訊息佇列都需要一個Message Service器來儲存轉寄訊息。而ZeroMQ則放棄了這個模式,把側重點放在了點對點的訊息傳輸上,並且(試圖)做到極致。以為Message Service器最終還是轉化為伺服器對其他節點的點對點訊息傳輸上。ZeroMQ能緩衝訊息,但是是在發送端緩衝。ZeroMQ裡有水位設定的相關介面來控制緩衝量。當然,ZeroMQ也支援傳統的訊息佇列(通過zmq_device來實現)。
強調訊息收發模式
在點對點的訊息傳輸上ZeroMQ將通訊的模式做了歸納,比如常見的訂閱模式(一個訊息發多個客戶),分發模式(N個訊息平均分給X個客戶)等等。下面是目前支援的訊息模式配對,任何一方都可以做為服務端。 非常靈活。
以統一介面支援多種底層通訊方式
不管是線程間通訊,處理序間通訊還是跨主機通訊,ZeroMQ都使用同一套API進行調用,只需要更改通訊協定名稱(如,從"ipc:///xxx"改為"tcp://...:****")即可。它提供了如下四種類型的傳輸協議:
- TCP: 在主機之間進行通訊
- INROC: 在同一進程的線程之間進行通訊(線程間)
- IPC : 同一主機的進程之間進行通訊
- PGM: 多播通訊
非同步,強調效能
ZeroMQ設計之初就是為了高效能的訊息發送而服務的,所以其設計追求簡潔高效。它發送訊息是非同步模式,通過單獨出一個IO線程來實現。它的效能往往令其他訊息佇列架構難以望其項背。
學習文檔:
如下兩篇C#的入門文檔介紹得還不錯,這裡推薦一下。
- CodeProject上有一篇文章非常不錯:ZeroMQ via C#: Introduction,國內也有該文的譯文:通過C#使用ZeroMQ。
- 這篇Blog也介紹得非常通俗易懂新世紀通訊函式庫 – ZeroMQ
- 官方文檔ZeroMQ Guide也有比較詳盡的中文版本,CSDN上也有下載的:點擊下載
ZeroMQ——一個輕量級的訊息通訊組件 C#