- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ZeroMQ介绍
ZeroMQ介绍
介绍
MQ有很多种,比如MSMQ,ActiveMQ,RabbitMQ等等
今天主要介绍的MQ是ZeroMQ,其具有一个独特的非中间件的模式不需要安装和运行一个消息服务器,或中间件。你只需要简单的引用ZeroMQ程序库然后你就可以愉快的在应用程序之间发送消息了public class Server {
public static void main(String[] args) throws Exception {
// Prepare our context and sockets
final ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.REP);
socket.bind(tcp://*:5555);?
while (true) {
byte[] request = socket.recv(0);
System.out.println(new String(request));
while (socket.hasReceiveMore()) {
request = socket.recv(0);
System.out.println(new String(request));
}
String s = new String(request);
long r = Long.parseLong(s) + 100;
// reply = request+100
socket.send(String.valueOf(r).getBytes(), 0);
}
}
}
客户端:
public class Client {
public static void main(String[] args) {
// Prepare our context and socket
final ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.REQ);?
System.out.println(Connecting to hello world server...);
socket.connect(tcp://localhost:5555);?
while (true) {
long l = System.nanoTime();
String s = String.valueOf(l);
socket.send(s.getBytes(), 0);
byte[] r = socket.recv(0);
System.out.println(l + + 100 = + new String(r));
}
}
}
设计模式
ZeroMQ 把通讯的需求看成四类。其中一类是一对一结对通讯,用来支持传统的 TCP socket 模型,但并不推荐使用。常用的通讯模式只有三类请求回应模型。由请求端发起请求,并等待回应端回应请求。从请求端来看,一定是一对收发配对的;反之,在回应端一定是发收对。请求端和回应端都可以是 1:N 的模型。通常把 1 认为是 server ,N 认为是 Client 。ZeroMQ 可以很好的支持路由功能(实现路由功能的组件叫作 Device),把 1:N 扩展为 N:M (只需要加入若干路由节点)。从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含有回应地址,而应用则不关心它。
发布订阅模型。这个模型里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅端。如果发布端开始发布信息的时候,订阅端尚未连接上来,这些信息直接丢弃。不过一旦订阅端连接上来,中间会保证没有信息丢失。同样,订阅端则只负责接收,而不能反馈。如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的 socket 采用请求回应模型满足这个需求。
管道模型。这个模型里,管道是单向的,从 PUSH 端单向的向 PULL 端单向的推送数据流。如果有多个client端同时连接到这个server,则服务器会在内部做一个负载均衡,采用平均分配的算法,将所有的消息均衡发布到client端上
2,3两种模式中,无论是server端还是client端在启动时?都是不知道client实际数量的,这就意味着,一个使用zeromq搭建的服务,可以进行”热更新”.
1) request-
文档评论(0)