zeromq总结

爷,独闯天下 提交于 2020-12-30 17:57:07

概述

我们真正需要的是这样一种消息软件,它能够做大型消息软件所能做的一切,但使用起来又非常简单,成本很低,可以用到所有的应用程序中,没有任何依赖条件。因为没有了额外的模块,就降低了出错的概率。这种软件需要能够在所有的操作系统上运行,并能支持所有的编程语言。

ZMQ就是这样一种软件:它高效,提供了嵌入式的类库,使应用程序能够很好地在网络中扩展,成本低廉。

ZMQ的主要特点有:

  •  ZMQ会在后台线程异步地处理I/O操作,它使用一种不会死锁的数据结构来存储消息。
  •  网络组件可以来去自如,ZMQ会负责自动重连,这就意味着你可以以任何顺序启动组件;用它创建的面向服务架构(SOA)中,服务端可以随意地加入或退出网络。
  •  ZMQ会在有必要的情况下自动将消息放入队列中保存,一旦建立了连接就开始发送。
  •  ZMQ有阈值(HWM)的机制,可以避免消息溢出。当队列已满,ZMQ会自动阻塞发送者,或丢弃部分消息,这些行为取决于你所使用的消息模式。
  •  ZMQ可以让你用不同的通信协议进行连接,如TCP、广播、进程内、进程间。改变通信协议时你不需要去修改代码。
  •  ZMQ会恰当地处理速度较慢的节点,会根据消息模式使用不同的策略。
  •  ZMQ提供了多种模式进行消息路由,如请求-应答模式、发布-订阅模式等。这些模式可以用来搭建网络拓扑结构。
  •  ZMQ中可以根据消息模式建立起一些中间装置(很小巧),可以用来降低网络的复杂程度。
  •  ZMQ会发送整个消息,使用消息帧的机制来传递。如果你发送了10KB大小的消息,你就会收到10KB大小的消息。
  •  ZMQ不强制使用某种消息格式,消息可以是0字节的,或是大到GB级的数据。当你表示这些消息时,可以选用诸如谷歌的protocol buffers,XDR等序列化产品。
  •  ZMQ能够智能地处理网络错误,有时它会进行重试,有时会告知你某项操作发生了错误。
  •  ZMQ甚至可以降低对环境的污染,因为节省了CPU时间意味着节省了电能。

其实ZMQ可以做的还不止这些,它会颠覆人们编写网络应用程序的模式。虽然从表面上看,它不过是提供了一套处理套接字的API,能够用zmq_recv()和zmq_send()进行消息的收发,但是,消息处理将成为应用程序的核心部分,很快你的程序就会变成一个个消息处理模块,这既美观又自然。它的扩展性还很强,每项任务由一个节点(节点是一个线程)、同一台机器上的两个节点(节点是一个进程)、同一网络上的两台机器(节点是一台机器)来处理,而不需要改动应用程序。

支持的传输协议

传输协议
描述
uri 示例
tcp
TCP的单播通信
tcp://*:8080
ipc
本地进程间通信
ipc://
inproc
本地线程间通信
inproc://
pgm
PGM广播通信
pgm://
epgm
广播通信
epgm://

核心消息模式

pattern
type
description
一对一结对模型
ZMQ_PAIR
 
请求回应模型
ZMQ_REQ
client端使用
ZMQ_REP
server端使用
ZMQ_DEALER
将消息以轮询的方式分发给所有对端(peers)
ZMQ_ROUTER
 
发布订阅模型
ZMQ_PUB
publisher端使用
ZMQ_XPUB
 
ZMQ_SUB
subscriber端使用
ZMQ_XSUB
 
管道模型
ZMQ_PUSH
push端使用
ZMQ_PULL
pull端使用
原生模型
ZMQ_STREAM
 

合法的套接字连接-绑定对(一端绑定、一端连接即可)

  • PUB - SUB
  • REQ - REP
  • REQ - ROUTER
  • DEALER - REP
  • DEALER - ROUTER
  • DEALER - DEALER
  • ROUTER - ROUTER
  • PUSH - PULL
  • PAIR - PAIR
其他的组合模式会产生不可预知的结果,在将来的ZMQ版本中可能会直接返回错误。你也可以通过代码去了解这些套接字类型的行为。
 
除了PAIR之外,其它模式都是支持一对多或多对一的

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!