ZeroMQ消息队列技术研究
来源:互联网 发布:手机淘宝招牌尺寸 编辑:程序博客网 时间:2024/06/04 20:07
概述
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消息队列技术研究
- 消息队列ZeroMQ实践
- 开源ZeroMQ消息队列
- ZeroMQ,史上最快的消息队列
- 消息队列-ZeroMQ的安装以及使用
- 消息队列与 ActiveMQ, RabbitMQ,ZeroMQ 等
- 为什么使用ZeroMQ作为消息队列
- ZeroMQ-史上最快的消息队列
- 史上最快python 异步消息队列zeromq 简介
- ActiveMQ、RabbitMQ与ZeroMQ等消息队列性能对比
- PHP队列处理-ZeroMQ
- ZeroMQ 消息内核
- 【ZeroMQ】消息模式
- ZeroMQ中的消息信封
- zeromq 中的消息
- ZeroMQ 消息队列 及 jzmq (java binding) 安装及代码测试
- ZeroMQ,史上最快的消息队列 —– ZMQ的学习和研究
- ZeroMQ,史上最快的消息队列 —– ZMQ的学习和研究
- ASP.NET - 菜单控件概述
- tomcat启动报错,A fatal error has been detected by the Java Runtime Environment:
- 如何正确入门Windows系统下驱动开发领域?
- shell 解压脚本
- Notepad++运行Python PHP Perl
- ZeroMQ消息队列技术研究
- Android手机休眠后时间不准确的解决方案
- %EXCEUTE在一个SQL Action里执行多条SQL语句
- 【转】经典_STM32_ADC多通道采样的例子
- vncviewer使用2
- Git的Patch功能(转)
- Difference between FieldEdit and FieldChange events
- jQuery仿淘宝商城天猫鼠标移动过去,透明度降低
- MFC中如何修改应用程序(xx.exe)的图标