ZMQ(或称为0MQ抑或ZeroMQ)是一套网络链接库,提供了可以在多种协议中传输消息的套接字,可在进程内、进程间和节点间通信,公用一套套接字。消息基于异步I/O机制,同时它支持多种语言C/C++/Java/PHP等30多种语言,支持Linux/Windows/OS X等多种操作系统环境,是一个跨语言、跨平台的高性能传输层网络通讯库,并且是开源免费的。它简单易用,学习成本低。号称“史上最快的消息队列”。目标是成为标准网络协议栈的一部分。
2、特点
1、简单,简洁: ZMQ的设计哲学就在于“制衡”,从它的名字就可以感受出来,“Zero”表示0,从0开始,从无开始。
2、支持高并发异步的Socket框架:但ZMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议,例如它也可以用于进程间和进程内的通讯。它改变了通讯都基于一对一的连接这个假设,可以依据需要实现N:M。
3、提供多种消息传递机制:ZMQ为应用程序提供了一套简单的套接字API,不用考虑实际使用的协议类型(进程内、进程间、机器间、或广播),打破了一种机制只能用于一种场景或协议。
4、异步I/O模式,适用于可扩展的多核应用开发,无论是发送消息还是接收消息,ZMQ都会先将消息放入管道中,当Reactor轮询到相应的读写事件的时候,适时的读写消息,且所有的I/O操作都在后台进行;
5、ZMQ保证进程不会因为内存溢出而崩溃,因为ZMQ有阈值(HWM)机制,可以避免消息溢出。当队列已满,ZMQ会自动阻塞发送者,或丢弃部分消息,这些行为取决于你所使用的消息模式;
6、当节点调动时,ZMQ会自动进行连接或重连,这就意味着你可以以任何顺序启动组件;用它创建的面向服务架构(SOA)中,服务端可以随意地加入或退出网络;
7、ZMQ会在有必要的情况下自动将消息放入队列中保存,一旦建立了连接就开始发送;
8、ZMQ使用消息帧的机制来传递整个消息,但不强制使用某种消息格式,消息的序列化/反序列化由应用层负责处理;
9、ZMQ会处理套接字异常,能够智能地处理网络错误,有时它会进行重试,有时会告知你某项操作发生了错误;
10、跨语言、跨平台、开源、社区活跃
简而言之,ZMQ 是一个更小、更快、更简单的基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。