回顾 ZeroMQ

今日在整理曾经的学习笔记,看到了ZeroMQ,号称史上最快消息内核。曾经在一创业公司用其开发过一些后端服务。当时用Go语言实现 源代码,使用的便是gozmq库.这个消息通信框架库的文章有很多,比较著名的当属一淘的,(技术文章这样写,的确是让读者舒服 :))还有官方文档

优点:

  • 高度封装。
    它处于会话层之上,应用层之下,你不需要自己写一行的socket函数调用就能完成复杂的网络通信工作。

  • 点对点的消息传输上。
    传统的消息队列都需要一个消息服务器来存储转发消息。而ZeroMQ则把侧重点放在了点对点的消息传输上。ZeroMQ能缓存消息,但是是在发送端缓存。ZeroMQ里有水位设置的相关接口来控制缓存量。当然,ZeroMQ也支持传统的消息队列(通过zmq_device来实现)。这样使得客户端在重启的时候可以重新发送上次未发送成功的消息

  • 灵活的收发模式。
    REQ-REP 请求响应模式,PUSH-PULL: 推拉模式, PUB-SUB: 发布订阅模式 等。 其中任何一方都可以作为服务端

  • 以统一接口支持多种底层通信方式
    支持线程间通信,进程间通信,跨主机通信,假如你想把本机多进程的软件放到跨主机的环境里去执行,通常要将IPC接口用套接字重写一遍。非常麻烦。而有了ZeroMQ就方便多了,只要把通信协议从”ipc:///xxx”改为”tcp://...:****”就可以了,其他代码通通不需要改,如果这个是从配置文件里读的话,那么程序就完全不要动了,直接复制到其他机器上就可以了。

  • 异步高效。
    ZeroMQ为了高性能的消息发送而服务的,它发送消息是异步模式,通过单独出一个IO线程来实现,要把资源释放函数交给ZeroMQ让ZeroMQ发完消息自己释放,所以消息发送调用之后不要立刻释放相关资源。