官网: ZeroMQ
简介
ZeroMQ是一个库,不是消息队列也不是消息中间件,介于应用层和传输层之间(按照TCP/IP划分)。
传统的Socket通信模式需要创建连接,销毁连接,选择协议等一些列操作。而ZeroMQ是在Socket封装一层的并行开发框架,它既不是TCP也不是Socket,它提供线程间、进程间以及网络间的消息信道。
格式分别为inproc://
、ipc://
、tcp://
、pgm://
。ZeroMQ会自动根据指定的字符串解析出协议、地址、端口号等信息。
模式
REQ/REP(请求应答模式)
REQ/REP 是最基本的模式。该模型主要用于远程调用及任务分配等。
由请求端发起请求,然后等待回应端应答。一个请求必须对应一个回应,从请求端的角度来看是发-收配对,从回应端的角度是收-发对。跟一对一结对模型的区别在于请求端可以是1~N个。
Router/Dealer(请求应答代理)
用于扩展REQ/REP套接字的高级模式。
PUB/SUB(发布订阅)
该模型主要用于数据分发。
发布端单向分发数据,且不关心是否把全部信息发送给订阅端。如果发布端开始发布信息时,订阅端尚未连接上来,则这些信息会被直接丢弃。订阅端未连接导致信息丢失的问题,可以通过与请求回应模型组合来解决。订阅端只负责接收,而不能反馈,且在订阅端消费速度慢于发布端的情况下,会在订阅端堆积数据。
PUSH/PULL(推拉)
该模型主要用于多任务并行,提高任务处理效率。
Server端作为Push端,而Client端作为Pull端,如果有多个Client端同时连接到Server端,则Server端会在内部做一个负载均衡,采用平均分配的算法,将所有消息均衡发布到Client端上。与发布订阅模型相比,推拉模型在没有消费者的情况下,发布的消息不会被消耗掉;在消费者能力不够的情况下,能够提供多消费者并行消费解决方案。
PAIR(独占对模式)
参考:
重头戏!ZeroMQ的独家对模式详解:ZMQ_PAIR_董哥的黑板报的博客-CSDN博客
ZeroMQ学习笔记(2)——套接字和模式 - 灰信网(软件开发博客聚合)
独家对模式(Exclusive pair)用于将一个对等点精确地连接到另一个对等点。此模式用于跨inproc传输的线程间通信。他支持的套接字类型只有1种:ZMQ_PAIR。
ZMQ_PAIR类型的套接字只能一次连接到单个对等方。当ZMQ_PAIR套接字已达到连接对等方的高水位线而进入静音状态时,或者如果没有连接任何对等方,则套接字上的任何zmq_send()操作都应阻塞,直到对等方可用于发送。
参考:
ZeroMQ学习笔记(2)——套接字和模式 - 灰信网(软件开发博客聚合)
重头戏!带你全览ZeroMQ的七大消息模式_zeromq消息类型_董哥的黑板报的博客-CSDN博客