ZeroMQ的模式-Requset-Reply-阿里云开发者社区

开发者社区> 杨粼波> 正文

ZeroMQ的模式-Requset-Reply

简介:
+关注继续查看

我们先来看看第一种模式:Request-Reply Pattern。 请求应答模式。

Request-Reply这个名字很直白,口语点说就是一问一答。可以使同步的遵循请求序的一问一答,也可以是异步的不按请求序的一问一答;其中也可以包含各种不同的路由策略——让谁来回答。zeromq定义的为这个模式服务的socket有:ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER以及ZMQ_DEALER. 用他们进行合理的组合,就可以实现现实世界中各种不同的请求应答模式。

分别来看:

ZMQ_REQ

ZMQ_REQ做的事情就是发问,然后收答。发、收必须是严格按序进行。请求时对对端进行Round Robin,遇到异常则阻塞。官方对这个socket的总结如下:

Summary of ZMQ_REQ characteristics
Compatible peer sockets ZMQ_REP
Direction Bidirectional
Send/receive pattern Send, Receive, Send, Receive, …
Outgoing routing strategy Round-robin
Incoming routing strategy Last peer
ZMQ_HWM option action Block

ZMQ_REP

ZMQ_REP做的事情是收问题然后回答。收、发严格按序调用。对收到的问题公平排队,逐一作答。回答发出时遇到异常则直接丢弃,不会阻塞。

Summary of ZMQ_REP characteristics
Compatible peer sockets ZMQ_REQ
Direction Bidirectional
Send/receive pattern Receive, Send, Receive, Send, …
Incoming routing strategy Fair-queued
Outgoing routing strategy Last peer
ZMQ_HWM option action Drop

可以发现,上述两种socket是纯同步的,连用在它们身上的api的调用顺序都有严格定义。而且没有办法动态决定请求的去向。如果要实现更复杂的请求应答模式,就要借助于下面两种socket了。

ZMQ_DEALER

其实ZMQ_DEALER也是同步的,ZMQ_DEALER也叫作ZMQ_XREQ,概念上是request/reply socket的扩展(实现上刚好相反哦)。从名字上可知它是一个代理层。它对收到的消息公平排队,并以RR方式发送消息,在遇到异常时发送阻塞。它的主要作用是将come in的请求load balance地发送给到对端们。

Summary of ZMQ_DEALER characteristics
Compatible peer sockets ZMQ_ROUTERZMQ_REQZMQ_REP
Direction Bidirectional
Send/receive pattern Unrestricted
Outgoing routing strategy Round-robin
Incoming routing strategy Fair-queued
ZMQ_HWM option action Block

ZMQ_ROUTER

ZMQ_ROUTER是真正的异步。ZMQ_ROUTER socket收到消息时会在消息栈上加一层包含消息来源地址的消息;发送消息时,会将这一层消息取出,将其作为发送的目的地。如果发送时遇到异常,则丢弃消息。ZMQ_ROUTER通过这种方式做到了不需要保存任何状态便可异步地转发消息,而这一切应用层是看不到的。

Summary of ZMQ_ROUTER characteristics
Compatible peer sockets ZMQ_DEALERZMQ_REQZMQ_REP
Direction Bidirectional
Send/receive pattern Unrestricted
Outgoing routing strategy See text
Incoming routing strategy Fair-queued
ZMQ_HWM option action Drop

总结

归纳总结一下,0mq的Request-Reply模式下有四种socket类型:

  • DEALER: 给连接的对端RR地分发消息,对收到的消息公平排队。
  • REQ:在应用层外发的消息上加一层空消息再发送;在收到消息后去掉分隔空消息再返回应用层。它实质上是在DEALER上构建的,只是在此基础上强制加入了发、收循环。
  • ROUTER:针对每一个收到的消息:加一层来源地址段,然后再交给应用层;针对每一个要发出的消息:去掉最上层的地址段,并以该地址段为目的地进行发送。
  • REP:对收到的消息:储存所有的消息内容直到第一个分隔空消息段,把剩余的消息体传给应用层;对发出的消息:把之前储存的消息体加回来,并像ROUTER一样发送出去。它实质上实在ROUTER上构建的,只是在此基础上强制加入了收、发循环。

有了这几种socket,便可以组合成各种Request-Reply模式了:

[REQ] <--> [REP] 
[REQ] <--> [ROUTER--DEALER] <--> [REP] 
[REQ] <--> [ROUTER--DEALER] <--> [ROUTER--DEALER] <--> [REP]
...

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Human vs AI,人类和机器的学习究竟谁更胜一筹?
在各种任务中人类的学习能力和机器的学习能力究竟哪个更胜一筹?
6 0
无服务器计算的机器学习,出路在哪里?(一)
本文重点关注了基于无服务器计算的机器学习的最新研究进展,并通过四篇研究论文表明了无服务器 ML 框架在执行机器学习任务时性能远优于经典的基于粗粒度的 VM 集群的ML框架。
3 0
【小白视角】大数据基础实践(四) 分布式数据库HBase的常用操作
目录 1. 环境配置 2. 操作步骤: 2.1 环境搭建 2.2 Hbase Shell 2.3 Java Api 3. 结论 最后 1. 环境配置 ⚫ 操作系统:Linux(建议 Ubuntu18.04); ⚫ Hadoop 版本:3.1.3; ⚫ JDK 版本:1.8; ⚫ Java IDE:IDEA; ⚫ Hadoop 伪分布式配置 ⚫ HBase1.1.5
6 0
无服务器计算的机器学习,出路在哪里?(二)
本文重点关注了基于无服务器计算的机器学习的最新研究进展,并通过四篇研究论文表明了无服务器 ML 框架在执行机器学习任务时性能远优于经典的基于粗粒度的 VM 集群的ML框架。
3 0
不出所料,百度EasyDL市场份额还是第一
在 2020 年的中国机器学习平台市场,百度的 EasyDL 又拿了第一。
3 0
重磅发布开源框架2.0RC版 、生物计算平台「螺旋桨」,百度飞桨交了份年终成绩单
在 12 月 20 日举行的「WAVE SUMMIT+ 2020 深度学习开发者峰会」上,飞桨平台交出了一份非常亮眼的年终成绩单。
6 0
带臂机器狗来了!捡垃圾、跳大绳、种花、写字,波士顿动力Spot机器狗迎来重大升级
今天,波士顿动力发布了 Spot 机器人全新视频,除了添加了一条机械臂,它还能实现捡垃圾、跳绳、种花等多种功能。
3 0
【期末复习】计算机网络 谢希仁版(六)应用层
目录 应用层 1. 网络应用程序的体系结构: 1.1 C/S 1.2 P2P 2. 域名结构 3. 域名解析过程 4. 万维网 4.1 URL 4.2 HTTP 4.3 静态页面 4.4 动态页面 4.5 活动页面 4.6 搜索引擎 5. 电子邮件系统主要协议,内容传送编码 5.1 SMTP 6. 各种网络应用相关协议及其端口号 7. socket 编程接口
3 0
使用Java程序消费SAP Leonardo的机器学习API
使用Java程序消费SAP Leonardo的机器学习API
4 0
万圣节定制「丧尸生成器」,编辑部亲测,效果鬼畜
get 了这个网站,今年万圣节 C 位就是你的!
6 0
+关注
杨粼波
网游的老兵
1135
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载