ZMQ详细安装文档

ZMQ Logo


1. JDK安装

我安装的是java version “1.8.0_73”
注意: 要配置好classpath,检测方法为

1
2
3
4
5
6
7
###如果结果如下,表示配置成功
[root@server001 java]# java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
[root@server001 java]# javac -version
javac 1.8.0_73

2. 官网下载zeromq的源码

https://github.com/zeromq/zeromq4-1/releases/download/v4.1.5/zeromq-4.1.5.tar.gz
或者我共享的zip压缩包@gitoschina

3. 解压,编译安装zeromqs

检查环境

1
sudo yum install autoconf automake libtool gcc gcc-g++ make libuuid-dev git

安装指令如下(make install 指令需要root权限)

1
2
3
4
5
6
7
8
tar -xzf zeromq-4.1.5.tar.gz
cd zeromq-4.1.5
./autogen.sh
./configure
make
make install
ldconfig
## 安装完成后,如果没报错,ls /usr/local/lib 会发现有文件名为libzmq的文件表示安装成功

4. 下载JZMQ

JZMQ是java封装了一下ZMQ,不是另外一个Pure Java ZeroMQ,下载地址为
https://github.com/zeromq/jzmq.git,用git clone下来
或者下载zip压缩包@github或者我共享的zip压缩包@gitoschina

不要下载v3.1.0 release版本,这个无法编译,是坑

5. 解压编译安装JZMQ

安装指令如下(make install指令需要root权限)

1
2
3
4
5
6
7
8
unzip jzmq-master.zip
cd jzmq-jni/
./autogen.sh
./configure
make
make install
### cd ..
### mvn package 官网有这个步骤,但是别按着来,是坑

安装完成后检查,如果都符合,恭喜,很有可能安装成功

1
2
3
4
5
6
7
8
9
#### lib下有如下包
[root@server001 java]# ls /usr/local/lib
libjzmq.a libjzmq.so.0 libpcre2-8.la libpcre2-8.so.0.3.0 libpcre2-posix.so libz.a libzmq.so libz.so pkgconfig
libjzmq.la libjzmq.so.0.0.0 libpcre2-8.so libpcre2-posix.a libpcre2-posix.so.0 libzmq.a libzmq.so.5 libz.so.1
libjzmq.so libpcre2-8.a libpcre2-8.so.0 libpcre2-posix.la libpcre2-posix.so.0.0.1 libzmq.la libzmq.so.5.0.1 libz.so.1.2.8
#### 有jar包在此目录
[root@server001 lib]# ls /usr/local/share/java/
zmq.jar

设置环境变量(root权限)

1
2
3
4
5
6
7
vi /etc/bashrc
vi /etc/profile
### 底部添加如下内容
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=.:$CLASSPATH:/usr/local/share/java/zmq.jar
export CLASSPATH

6. 写server和client代码验证JZMQ安装成功

这里是官方的Guide文档(很长,有多种语言的实现,我们只选择Java)http://zguide.zeromq.org/page:all
你也可以看我写的代码进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
### 运行成功输出
[root@server001 java]# java -jar server.jar
Received Hello
Received Hello
Received Hello
Received Hello
...
[root@server001 java]# java -jar client.jar
Connecting to hello world server…
Sending Hello 0
Received World 0
Sending Hello 1
Received World 1
Sending Hello 2
Received World 2
...

以下是测试Java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import org.zeromq.ZMQ;
/**
* Created by admin on 2016/7/15.
*/
public class hwserver {
public static void main(String[] args) throws InterruptedException {
ZMQ.Context context = ZMQ.context(1);
// Socket to talk to clients
ZMQ.Socket responder = context.socket(ZMQ.REP);
responder.bind("tcp://*:5555");
while (!Thread.currentThread().isInterrupted()) {
// Wait for next request from the client
byte[] request = responder.recv(0);
System.out.println("Received Hello");
// Do some 'work'
Thread.sleep(1000);
// Send reply back to client
String reply = "World";
responder.send(reply.getBytes(), 0);
}
responder.close();
context.term();
}
}
import org.zeromq.ZMQ;
/**
* Created by admin on 2016/7/15.
*/
public class hwclient {
public static void main(String[] args) {
ZMQ.Context context = ZMQ.context(1);
// Socket to talk to server
System.out.println("Connecting to hello world server…");
ZMQ.Socket requester = context.socket(ZMQ.REQ);
requester.connect("tcp://localhost:5555");
for (int requestNbr = 0; requestNbr != 10; requestNbr++) {
String request = "Hello";
System.out.println("Sending Hello " + requestNbr);
requester.send(request.getBytes(), 0);
byte[] reply = requester.recv(0);
System.out.println("Received " + new String(reply) + " " + requestNbr);
}
requester.close();
context.
}