ZeroMQ消息队列技术研究

概述

ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展。它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问。
在使用ZeroMQ之前,用户必须调用zmq_init()初始化ZeroMQ的context,用户在终止使用ZeroMQ之前,必须调用zmq_term()。
ZeroMQ的上下文(context)
ZeroMQ的context是线程安全的,线程间可以共享使用context,不需要加锁。
ZeroMQ的socket不是线程安全的,也就是说一个socket只能由一个线程创建,使用和销毁。否则就要使用mutex,semphore等。

ZeroMQ的消息

消息是进程间或线程间传递数据的单元,从用户角度来看,消息是不透明的二进制数据体。
消息相关的函数包括:
初始化:zmq_msg_init(), zmq_msg_init_size(), zmq_msg_init_data()
释放:zmq_msg_close()
访问: zmq_msg_data(), zmq_msg_size()
操作: zmq_msg_copy(), zmq_msg_move()

Sockets

ZeroMQ的套接字(sockets)代表异步消息队列的抽象,消息队列的类型由socket的类型决定,它在zmq_socket()调用时用参数指定。套接字支持以下调用:
建立套接字:zmq_socket()
关闭套接字:zmq_close()
操作套接字选项:zmq_getsockopt(), zmq_setsockopt()
建立消息流:zmq_bind(), zmq_connect()
发送和接收消息:zmq_send(), zmq_recv()
输入输出复用:ZeroMQ提供了一个机制,使应用程序可以复用ZeroMQ的socket和普通socket的输入/输出事件。具体参见zmq_poll()

传输

一个ZeroMQ的socket可以使用多个不同的底层传输机制。每个传输机制适合一种特定机制,各有优缺点。ZeroMQ提供了以下传输机制:
TCP单播:zmq_tcp()
PGM可靠的组播传输:zmq_pgm()
本地进程间通讯:zmq_ipc()
本地进程内通讯:zmq_inproc()

设备(device)

ZeroMQ提供了设备,设备作为复杂消息通讯拓扑的中间结点。设备可以是broker,其他节点可以连接到它,也可以是proxy,可以通过它连接到其它节点,或者是这两种模型的混合。
用户可以在一个线程中启动设备,参见zmq_device()。

错误处理

ZeroMQ的库函数用POSIX的标准方法处理错误。一般说来,这意味着失败的时候ZeroMQ的库函数应该返回0或负值,实际的错误码保存在errno变量中。
非POSIX系统上,可以用专门的函数取回errno变量的值。zmq_errno()函数用于这一目的。zmq_strerror()函数。

其它函数

获取库版本:zmq_version()

语言绑定

ZeroMQ可以用大多数语言进行调用,包括C, C++, C#, Clojure, CL, Erlang, F#, Felix, Go, Haskell, Java, Lua, Node.js, Objective-C, Perl, PHP, Python, Ruby, Scala, Tcl, Ada, Basic, Haxe, ooc。



你可能感兴趣的:(ZeroMQ,消息队列)