ZeroMQ是一個輕量級的消息通信組件,盡管名字中包含了"MQ",嚴格上來講ZeroMQ並不是"消息隊列/消息中間件"。ZeroMQ是一個傳輸層API庫, 更關注消息的傳輸。與消息隊列相比,ZeroMQ有以下一些特點:
點對點無中間節點
傳統的消息隊列都需要一個消息服務器來存儲轉發消息。而ZeroMQ則放棄了這個模式,把側重點放在了點對點的消息傳輸上,並且(試圖)做到極致。以為消息服務器最終還是轉化為服務器對其他節點的點對點消息傳輸上。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上也有下載的:點擊下載