ZeroMQ安裝說明
1. 安裝
1.1. Linux zmq安裝
安裝過程參考地址:http://zeromq.org/intro:get-the-software的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/libzmq下載源碼,得到壓縮包libzmq-master.zip(可以使用git工具下載);
(git clone https://github.com/zeromq/libzmq)
2. 安裝cmake autoconf automake libtool等工具;
3. 將libzmq-master.zip傳入系統中,執行以下命令;
unzip libzmq-master.zip
mv libzmq-master.zip libzmq
cd libzmq
./autogen.sh && ./configure && make -j 4
make check && make install && sudo ldconfig
這樣就安裝在了目錄/usr/local下了,可以在/usr/local/lib下找到動態庫,可以在/usr/local/include下找到頭文件。
1.2. Linux CZMQ安裝
安裝過程參考地址:http://api.zeromq.org/czmq3-0:czmq的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/czmq下載源碼,得到壓縮包czmq-master.zip(可以使用git工具下載);
(git clone https://github.com/zeromq/czmq)
2. 安裝cmake autoconf automake libtool等工具;
3. 將czmq-master.zip傳入系統中,執行以下命令;
unzip czmq-master.zip
mv czmq-master czmq
cd czmq
./autogen.sh
./configure
如果報以下錯誤:
checking for zmq_init in -llibzmq... no
configure: error: cannot link with -lzmq, install libzmq
則修改文件configure,將文件中的lllibzmq替換為lzmq,再次執行./configure
4. 執行make,再執行make check,切換到root用戶,執行make install,執行ldconfig,安裝完成。
安裝完成后,czmq安裝在了/usr/local下,可以在/usr/local/lib下找到動態庫,可以在/usr/local/include下找到頭文件。
1.3. Windows zmq安裝
安裝過程參考地址:http://zeromq.org/intro:get-the-software的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/libzmq下載源碼,得到壓縮包libzmq-master.zip(可以使用git工具下載)。
2. 解壓縮libzmq-master.zip文件,得到文件夾libzmq-master,修改libzmq-master目錄名為libzmq;
3. 在目錄/libzmq/builds/msvc下存在腳本文件configure.bat,在CMD下執行這個腳本文件;
4. 用相應的VS打開目錄/libzmq/builds/msvc/下對應目錄下的項目,編譯,就生出動態庫。
生成的庫在目錄\libzmq\bin\Win32\Debug\v120\dynamic下,頭文件在目錄\libzmq\include下。
1.4. Windows jzmq安裝(32位)
l 安裝jzmq必須首先安裝zmq。
l 安裝過程參考地址:http://zeromq.org/bindings:java的說明
l 安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/jzmq下載源碼,得到壓縮包jzmq-master.zip(可以使用git工具下載)。
2. 解壓縮jzmq-master.zip文件,得到文件夾jzmq-master,修改jzmq-master目錄名為jzmq;
3. 在目錄\jzmq\jzmq-jni\builds\msvc目錄下用vs打開msvc.sln,修改配置:
a) 在項目jzmp上右擊,選擇“屬性”;在“jzmq屬性頁”中點擊“配置管理器”,選擇“平台”為“Win32”,點擊關閉。
b) 選擇"VC++ 目錄”, 將以下目錄添加到”包含目錄”:
<jdk>\include\win32
<jdk>\include
<zeromq>\include
c) 將以下目錄添加到”庫目錄”:
<zeromq>\lib
編譯錯誤:
錯誤 1 error C1083: 無法打開包括文件: “config.hpp”: No such file or directory c:\users\lenovo\jzmq\jzmq-jni\src\main\c++\jzmq.hpp 23 1 jzmq
解決方法:在目錄\ jzmq下搜索文件jzmq.hpp,然后將文件所在的目錄添加到項目的”包含目錄“。
錯誤 2 copy ..\config.hpp ..\..\..\src\main\c++\
javac ..\..\..\src\main\java\org\zeromq\ZMQ.java ..\..\..\src\main\java\org\zeromq\ZMQException.java ..\..\..\src\main\java\org\zeromq\ZMQForwarder.java ..\..\..\src\main\java\org\zeromq\ZMQQueue.java ..\..\..\src\main\java\org\zeromq\Utils.java ..\..\..\src\main\java\org\zeromq\ZMQStreamer.java ..\..\..\src\main\java\org\zeromq\EmbeddedLibraryTools.java ..\..\..\src\main\java\org\zeromq\App.java ..\..\..\src\main\java\org\zeromq\ZContext.java ..\..\..\src\main\java\org\zeromq\ZDispatcher.java ..\..\..\src\main\java\org\zeromq\ZFrame.java ..\..\..\src\main\java\org\zeromq\ZMsg.java
解決方法:在目錄/jzmq下搜索上面相應的java源文件,將它們拷貝到目錄目錄\jzmq\jzmq-jni\src\main\java\org\zeromq\下。
然后編譯,通過,在目錄\jzmq\jzmq-jni\lib下生產了jzmq.dll、zmq.jar等文件。
l 編譯和運行:
java -cp <jzmq>\zmq.jar test.java
將libzmq.dll和jzmq.dll拷貝到test.java運行目錄,執行
java -Djava.library.path=C:\Users\lenovo\Desktop\tmp -classpath C:\Users\lenovo\Desktop\tmp\zmq.jar;. test
l ecplise中使用
a) 將zmq.jar添加到系統環境變量CLASS_PATH中
b) 將jzmq.dll和libzmq.dll所在的路徑添加到系統環境變量PATH中
c) 在ecplise的項目上右擊,選擇”Build Path”->”Configure Build Path”,點擊”Java Build Path“,選擇”Libraries”,選擇“Add External JARs…”,添加zmq.jar。
1.5. Linux jzmq安裝
安裝jzmq必須首先安裝zmq。
安裝過程參考地址:http://zeromq.org/bindings:java的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/jzmq下載源碼,得到壓縮包jzmq-master.zip(可以使用git工具下載)。
(git clone https://github.com/zeromq/jzmq)
2. 解壓縮jzmq-master.zip文件,得到文件夾jzmq-master,修改jzmq-master目錄名為jzmq;
3. 進入目錄jzmq,執行以下命令
$ ./autogen.sh
$ ./configure
$ make
$ make install
4. 以root權限執行ldconfig
這樣,jzmq就被安裝在了/usr/local/目錄下,libjzmq.so在目錄/usr/local/lib下,zmq.jar在目錄/usr/local/share/java/下。
5. 修改java環境變量CLASSPATH,添加/usr/local/share/java/zmq.jar
編譯程序:
javac hwclient.java
運行程序:
java -Djava.library.path=/usr/local/lib hwclient
ZeroMQ安裝使用說明
1. 安裝
1.1. Linux zmq安裝
安裝過程參考地址:http://zeromq.org/intro:get-the-software的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/libzmq下載源碼,得到壓縮包libzmq-master.zip(可以使用git工具下載);
(git clone https://github.com/zeromq/libzmq)
2. 安裝cmake autoconf automake libtool等工具;
3. 將libzmq-master.zip傳入系統中,執行以下命令;
unzip libzmq-master.zip
mv libzmq-master.zip libzmq
cd libzmq
./autogen.sh && ./configure && make -j 4
make check && make install && sudo ldconfig
這樣就安裝在了目錄/usr/local下了,可以在/usr/local/lib下找到動態庫,可以在/usr/local/include下找到頭文件。
1.2. Linux CZMQ安裝
安裝過程參考地址:http://api.zeromq.org/czmq3-0:czmq的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/czmq下載源碼,得到壓縮包czmq-master.zip(可以使用git工具下載);
(git clone https://github.com/zeromq/czmq)
2. 安裝cmake autoconf automake libtool等工具;
3. 將czmq-master.zip傳入系統中,執行以下命令;
unzip czmq-master.zip
mv czmq-master czmq
cd czmq
./autogen.sh
./configure
如果報以下錯誤:
checking for zmq_init in -llibzmq... no
configure: error: cannot link with -lzmq, install libzmq
則修改文件configure,將文件中的lllibzmq替換為lzmq,再次執行./configure
4. 執行make,再執行make check,切換到root用戶,執行make install,執行ldconfig,安裝完成。
安裝完成后,czmq安裝在了/usr/local下,可以在/usr/local/lib下找到動態庫,可以在/usr/local/include下找到頭文件。
1.3. Windows zmq安裝
安裝過程參考地址:http://zeromq.org/intro:get-the-software的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/libzmq下載源碼,得到壓縮包libzmq-master.zip(可以使用git工具下載)。
2. 解壓縮libzmq-master.zip文件,得到文件夾libzmq-master,修改libzmq-master目錄名為libzmq;
3. 在目錄/libzmq/builds/msvc下存在腳本文件configure.bat,在CMD下執行這個腳本文件;
4. 用相應的VS打開目錄/libzmq/builds/msvc/下對應目錄下的項目,編譯,就生出動態庫。
生成的庫在目錄\libzmq\bin\Win32\Debug\v120\dynamic下,頭文件在目錄\libzmq\include下。
1.4. Windows jzmq安裝(32位)
l 安裝jzmq必須首先安裝zmq。
l 安裝過程參考地址:http://zeromq.org/bindings:java的說明
l 安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/jzmq下載源碼,得到壓縮包jzmq-master.zip(可以使用git工具下載)。
2. 解壓縮jzmq-master.zip文件,得到文件夾jzmq-master,修改jzmq-master目錄名為jzmq;
3. 在目錄\jzmq\jzmq-jni\builds\msvc目錄下用vs打開msvc.sln,修改配置:
a) 在項目jzmp上右擊,選擇“屬性”;在“jzmq屬性頁”中點擊“配置管理器”,選擇“平台”為“Win32”,點擊關閉。
b) 選擇"VC++ 目錄”, 將以下目錄添加到”包含目錄”:
<jdk>\include\win32
<jdk>\include
<zeromq>\include
c) 將以下目錄添加到”庫目錄”:
<zeromq>\lib
編譯錯誤:
錯誤 1 error C1083: 無法打開包括文件: “config.hpp”: No such file or directory c:\users\lenovo\jzmq\jzmq-jni\src\main\c++\jzmq.hpp 23 1 jzmq
解決方法:在目錄\ jzmq下搜索文件jzmq.hpp,然后將文件所在的目錄添加到項目的”包含目錄“。
錯誤 2 copy ..\config.hpp ..\..\..\src\main\c++\
javac ..\..\..\src\main\java\org\zeromq\ZMQ.java ..\..\..\src\main\java\org\zeromq\ZMQException.java ..\..\..\src\main\java\org\zeromq\ZMQForwarder.java ..\..\..\src\main\java\org\zeromq\ZMQQueue.java ..\..\..\src\main\java\org\zeromq\Utils.java ..\..\..\src\main\java\org\zeromq\ZMQStreamer.java ..\..\..\src\main\java\org\zeromq\EmbeddedLibraryTools.java ..\..\..\src\main\java\org\zeromq\App.java ..\..\..\src\main\java\org\zeromq\ZContext.java ..\..\..\src\main\java\org\zeromq\ZDispatcher.java ..\..\..\src\main\java\org\zeromq\ZFrame.java ..\..\..\src\main\java\org\zeromq\ZMsg.java
解決方法:在目錄/jzmq下搜索上面相應的java源文件,將它們拷貝到目錄目錄\jzmq\jzmq-jni\src\main\java\org\zeromq\下。
然后編譯,通過,在目錄\jzmq\jzmq-jni\lib下生產了jzmq.dll、zmq.jar等文件。
l 編譯和運行:
java -cp <jzmq>\zmq.jar test.java
將libzmq.dll和jzmq.dll拷貝到test.java運行目錄,執行
java -Djava.library.path=C:\Users\lenovo\Desktop\tmp -classpath C:\Users\lenovo\Desktop\tmp\zmq.jar;. test
l ecplise中使用
a) 將zmq.jar添加到系統環境變量CLASS_PATH中
b) 將jzmq.dll和libzmq.dll所在的路徑添加到系統環境變量PATH中
c) 在ecplise的項目上右擊,選擇”Build Path”->”Configure Build Path”,點擊”Java Build Path“,選擇”Libraries”,選擇“Add External JARs…”,添加zmq.jar。
1.5. Linux jzmq安裝
安裝jzmq必須首先安裝zmq。
安裝過程參考地址:http://zeromq.org/bindings:java的說明
安裝步驟如下(在安裝時參考安裝包中的REDEME):
1. 從https://github.com/zeromq/jzmq下載源碼,得到壓縮包jzmq-master.zip(可以使用git工具下載)。
(git clone https://github.com/zeromq/jzmq)
2. 解壓縮jzmq-master.zip文件,得到文件夾jzmq-master,修改jzmq-master目錄名為jzmq;
3. 進入目錄jzmq,執行以下命令
$ ./autogen.sh
$ ./configure
$ make
$ make install
4. 以root權限執行ldconfig
這樣,jzmq就被安裝在了/usr/local/目錄下,libjzmq.so在目錄/usr/local/lib下,zmq.jar在目錄/usr/local/share/java/下。
5. 修改java環境變量CLASSPATH,添加/usr/local/share/java/zmq.jar
編譯程序:
javac hwclient.java
運行程序:
java -Djava.library.path=/usr/local/lib hwclient
2. 使用
2.1. 手冊
api中文翻譯手冊請參考:http://www.cnblogs.com/fengbohello/p/4230135.html(中文翻譯的)。
api原版:http://api.zeromq.org/4-0:zmq。
java原版手冊:http://zeromq.github.io/jzmq/javadocs/,java的使用說明也可以參考中文翻譯的api,接口是相似的。
使用方法參考:《ZeroMQ 雲時代極速消息通信庫 PDF電子書下載 帶書簽目錄 完整版.pdf》,這本書提供了示例,包含N種語言,可以從https://github.com/imatix/zguide/tree/master/examples獲取。
2.2. 串行的請求/響應
圖 1 串行的請求/響應
參考hwserver.c和hwclient.c。
常見請求/響應合法組合
REQ -> REP
DEALER -> REP
REQ -> ROUTER
DEALER -> ROUTER
DEALER -> DEALER 很難使用
ROUTER -> ROUTER 很難使用
2.3. 訂閱/發布
圖 2 訂閱/發布
參考wuserver.c和wuclient.c。
2.4. 管道模式
圖 3 管道模式
參考tasksink2.c、tasksink.c、taskvent.c、taskwork2.c、taskwork.c
2.5. 多套接字輪訓
參考mspoller.c
2.6. 代理訂閱發布
圖 4 代理訂閱發布
參考wuproxy.c
2.7. 代理請求應答
圖 5 代理請求應答
參考rrbroker.c、rrclient.c、rrworker.c、msgqueue.c
2.8. 傳輸橋接
圖 6 傳輸橋接
參考wuclient.c、wuproxy.c、wuserver.c
2.9. 中斷信號處理
參考interrupt.c
2.10. 多線程請求/響應
參考mtserver.c
2.11. 線程間信令(PAIR套接字)
2.12. 零拷貝
函數zmq_msg_init_data。不建議使用
2.13. 發送空幀消息
//發送一個空包
zmq_msg_t msg;
zmq_msg_init(&msg);
if (zmq_msg_send(&msg, pfd, 0) < 0)
{
zmq_msg_close(&msg);
return -1;
}
zmq_msg_close(&msg);
2.14. 可靠的請求/應答模型——請求端
l 僅當確信應答已經到達時,才輪訓REQ套接字並接收它的應答;
l 如果在超時時間內沒有應答到達,則重新發送一個請求;
l 如果多次請求后還是沒有應答,則放棄事物。
圖 7 可靠的請求/應答模型——請求端
參考lpclient.c
3. 出錯與注意事項
3.1. 常見出錯原因
3.2. zmq_msg_data(&request)不能直接用%s直接打印
3.3. 結構體zmq_msg_t必須使用系統提供的函數操作
3.4. 不要在創建套接字的線程外使用或者關閉該套接字
3.5. 永遠不要把一個zmq_msg_t對象初始化兩次
zmq_msg_init()、zmq_msg_init_data()和zmq_msg_init_size()這三個函數是互斥的,對一個zmq_msg_t對象只能調用一個。
3.6. zmq_msg_t對象在調用函數zmq_msg_send后會被改變