ZeroMQ概述

ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。换句话说,ZMQ是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。普通的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系。ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯)它改变了通讯都基于一对一的连接这个假设。ZeroMQ 把通讯的需求看成四类。其中一类是一对一结对通讯,用来支持传统的 TCP socket 模型,但并不推荐使用。常用的通讯模式只有三类:

 

一、请求回应模型

由请求端发起请求,并等待回应端回应请求。请求和回应是对应的,客户端发送数据,服务端接收到数据之后回应一条数。

一问一答,类似TCP。       

                                   

wmb 消息队列 zmq 消息队列_一对一

                              


二、发布订阅模型

这个模型里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅端。如果发布端开始发布信息的时候,订阅端尚未连接上来,这些信息直接丢弃。不过一旦订阅端连接上来,所有的消息都会接收到。而订阅端则只负责接收,不能发送数据。如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的 socket 采用请求回应模型满足这个需求。                         

                             

wmb 消息队列 zmq 消息队列_套接字_02

                                    

三、管道模型

这个模型里,管道是单向的,从 PUSH 端单向的向 PULL 端单向的推送数据流。可以实现负载均衡。                                              

不知道为什么,相关图片上传了 但是显示不了。不知道是不是被和谐了。                         

                                  

wmb 消息队列 zmq 消息队列_套接字_03