1. 简介

ZMQ(ØMQ、ZeroMQ、0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。特点如下:

  • 会在后台线程异步地处理I/O操作,它使用一种不会死锁的数 据结构来存储消息。

  • 网络组件可以来去自如,ZMQ会负责自动重连,这就意味着你可以 以任何顺序启动组件;用它创建的面向服务架构(SOA)中,服务 端可以随意地加入或退出网络。

  • 在有必要的情况下自动将消息放入队列中保存,一旦建立了连接就开始发送。

  • 有阈值(HWM)的机制,可以避免消息溢出。当队列已满,ZMQ会自动阻塞发送者,或丢弃部分消息,这些行为取决于你所使 用的消息模式。

  • 可以让你用不同的通信协议进行连接,如TCP、广播、进程内、进程间。改变通信协议时你不需要去修改代码。

  • 会恰当地处理速度较慢的节点,会根据消息模式使用不同的策略。

  • 提供了多种模式进行消息路由,如请求-应答(REQ-REP)模式、发布-订阅(PUB-SUB)模式等。这些模式可以用来搭建网络拓扑结构。

  • 可以根据消息模式建立起一些中间装置(很小巧),可以用 来降低网络的复杂程度。

  • 会发送整个消息,使用消息帧的机制来传递。如果你发送了 10KB大小的消息,你就会收到10KB大小的消息。

  • 不强制使用某种消息格式,消息可以是0字节的,或是大到GB 级的数据。当你表示这些消息时,可以选用诸如谷歌的protocol buffersXDR等序列化产品。

  • 能够智能地处理网络错误,有时它会进行重试,有时会告知你 某项操作发生了错误。

  • 甚至可以降低对环境的污染,因为节省了CPU时间意味着节省了电能。