概述
我們真正需要的是這樣一種消息軟件,它能夠做大型消息軟件所能做的一切,但使用起來又非常簡單,成本很低,可以用到所有的應用程序中,沒有任何依賴條件。因爲沒有了額外的模塊,就降低了出錯的概率。這種軟件需要能夠在所有的操作系統上運行,並能支持所有的編程語言。
ZMQ就是這樣一種軟件:它高效,提供了嵌入式的類庫,使應用程序能夠很好地在網絡中擴展,成本低廉。
ZMQ的主要特點有:
- ZMQ會在後臺線程異步地處理I/O操作,它使用一種不會死鎖的數據結構來存儲消息。
- 網絡組件可以來去自如,ZMQ會負責自動重連,這就意味着你可以以任何順序啓動組件;用它創建的面向服務架構(SOA)中,服務端可以隨意地加入或退出網絡。
- ZMQ會在有必要的情況下自動將消息放入隊列中保存,一旦建立了連接就開始發送。
- ZMQ有閾值(HWM)的機制,可以避免消息溢出。當隊列已滿,ZMQ會自動阻塞發送者,或丟棄部分消息,這些行爲取決於你所使用的消息模式。
- ZMQ可以讓你用不同的通信協議進行連接,如TCP、廣播、進程內、進程間。改變通信協議時你不需要去修改代碼。
- ZMQ會恰當地處理速度較慢的節點,會根據消息模式使用不同的策略。
- ZMQ提供了多種模式進行消息路由,如請求-應答模式、發佈-訂閱模式等。這些模式可以用來搭建網絡拓撲結構。
- ZMQ中可以根據消息模式建立起一些中間裝置(很小巧),可以用來降低網絡的複雜程度。
- ZMQ會發送整個消息,使用消息幀的機制來傳遞。如果你發送了10KB大小的消息,你就會收到10KB大小的消息。
- ZMQ不強制使用某種消息格式,消息可以是0字節的,或是大到GB級的數據。當你表示這些消息時,可以選用諸如谷歌的protocol buffers,XDR等序列化產品。
- ZMQ能夠智能地處理網絡錯誤,有時它會進行重試,有時會告知你某項操作發生了錯誤。
- ZMQ甚至可以降低對環境的污染,因爲節省了CPU時間意味着節省了電能。
其實ZMQ可以做的還不止這些,它會顛覆人們編寫網絡應用程序的模式。雖然從表面上看,它不過是提供了一套處理套接字的API,能夠用zmq_recv()和zmq_send()進行消息的收發,但是,消息處理將成爲應用程序的核心部分,很快你的程序就會變成一個個消息處理模塊,這既美觀又自然。它的擴展性還很強,每項任務由一個節點(節點是一個線程)、同一臺機器上的兩個節點(節點是一個進程)、同一網絡上的兩臺機器(節點是一臺機器)來處理,而不需要改動應用程序。
支持的傳輸協議
傳輸協議
|
描述
|
uri 示例
|
tcp
|
TCP的單播通信
|
tcp://*:8080
|
ipc
|
本地進程間通信
|
ipc://
|
inproc
|
本地線程間通信
|
inproc://
|
pgm
|
PGM廣播通信
|
pgm://
|
epgm
|
廣播通信
|
epgm://
|
核心消息模式
pattern
|
type
|
description
|
一對一結對模型
|
ZMQ_PAIR
|
|
請求迴應模型
|
ZMQ_REQ
|
client端使用
|
ZMQ_REP
|
server端使用
|
|
ZMQ_DEALER
|
將消息以輪詢的方式分發給所有對端(peers)
|
|
ZMQ_ROUTER
|
|
|
發佈訂閱模型
|
ZMQ_PUB
|
publisher端使用
|
ZMQ_XPUB
|
|
|
ZMQ_SUB
|
subscriber端使用
|
|
ZMQ_XSUB
|
|
|
管道模型
|
ZMQ_PUSH
|
push端使用
|
ZMQ_PULL
|
pull端使用
|
|
原生模型
|
ZMQ_STREAM
|
|
合法的套接字連接-綁定對(一端綁定、一端連接即可)
-
PUB - SUB
-
REQ - REP
-
REQ - ROUTER
-
DEALER - REP
-
DEALER - ROUTER
-
DEALER - DEALER
-
ROUTER - ROUTER
-
PUSH - PULL
-
PAIR - PAIR