Zeromq模式详解
ZeroMQ是一种基于消息队列的多线程网络库,提供跨越多种传输协议(TCP:传输控制协议,当传输出现错误时能自动予以纠正;UDP:用户数据包协议,当传输出现错误时会将错误信息丢弃;)的套接字。ZeroMQ是一个可伸缩层,可并行运行,分散在分布式系统间。
1.Request-Reply模式
问答一一对应
问答模式,由请求端发起请求,然后等待回应端应答。一个请求必须对应一个回应,从请求端的角度来看是发-收配对,从回应端的角度是收-发对。请求端可以是1~N个。该模型主要用于远程调用及任务分配等。
使用REQ-REP套接字发送和接受消息是需要遵循一定规律的。客户端首先使用zmq_send()发送消息,再用zmq_recv()接收,如此循环。如果打乱了这个顺序(如连续发送两次)则会报错。类似地,服务端必须先进行接收,后进行发送。
也就是说Request-Reply模式是严格同步的,Request端必须先发送后接受,reply端必须先接受后发送。
req问
package zeromqDemo;import org.zeromq.ZMQ;//模拟问答模式中的问
public class ZmqReq {public static void main(String[] args) {//创建zeromq客户端ZMQ.Context zmq = ZMQ.context(1);//创建一个问的客户端ZMQ.Socket req = zmq.socket(ZMQ.REQ);//连接ip和端口req.connect("tcp://localhost:5555");//定义标志位int i = 0;//接收数据while (!Thread.currentThread().isInterrupted()){//发送请求String str = "hello world";//发送req.send(str+i);System.out.println(str+i);//接收数据byte[] recv = req.recv();//打印System.out.println(new String(recv));i++;}//关闭资源req.close();zmq.close();}
}
rep答
package zeromqDemo;import org.zeromq.ZMQ;//模拟问答模式中的答
public class ZmqRep {public static void main(String[] args) throws InterruptedException {//创建zmq实例ZMQ.Context zmq = ZMQ.context(1);//创建答的实例ZMQ.Socket rep = zmq.socket(ZMQ.REP);//绑定ip和端口rep.