这货根本不是 MQ !

它只是一个 lib。不是什么可以用个类似于 start 的命令启动起来的 service 或者 daemon 程序

它是个协议。用于 node 之间消息的传送。这个 node 可以是线程、进程或者物理 box。之间可以是他们任意两个之间

它不支持持久化

它的实现不包含数据的序列、反序列化

它实现了支持 Pragmatic General Multicast 的广播

它高度概括并实现了三种通讯模式:Req-Rep; Pub-Sub; Pipe; 任何分布式,并行的需求,都可以用这三种模型组合起来解决问题

ZeroMQ 的模式 - 综述

ZeroMQ 对这个世界中消息传输的模式进行了很好的抽象

传统的 socket 其实就是访问下面两种 (TCP & UDP) 对象的同步的接口:

  • 面向连接的可靠字节流 (SOCK_STREAM)
  • 无连接的不可靠的数据报文 (SOCK_DGRAM)
  • 所以你可以说传统 socket 传输的是字节流或者独立的报文

而 0mq 的 socket 传输的是消息 (Message)。它是对 异步_消息 队列 (MQ) 的一种抽象

异步 指物理连接的创建、销毁、重连、传输对于用户来说都是透明的,这些东西都由 0mq 组织好了

它传输的是独立的消息

队列隐含的意思是万一消息无法到达对端则可能会被排队

除了传统 socket 实现的一对一、多对一以及一对多 (广播)外,0mq 的 socket 还可以用 zmq_connect() 发起连接到多个对端,并同时接受从多个用 zmq_bind() 绑定了 0mq-socket 的对端发起的链接,从而实现多对多

0mq 归纳的模式有四种

  • Request-reply Pattern
  • Publish-subscribe Pattern
  • Pipeline Pattern
  • Exclusive pair Pattern