五分钟熟悉zeromq消息中间件

来源:互联网 发布:凯聪为什么在淘宝消失 编辑:程序博客网 时间:2024/05/20 05:03

一、介绍
zmq,即zero message queue,mq轻量级消息传递内核是一个库,它扩展了标准的套接字接口,并提供了由专门的消息传递中间件产品提供的特性。zmq套接字提供一个抽象的异步消息队列,多个消息传递模式,信息过滤(订阅),无缝访问多个传输协议等等。

在使用任何zmq库函数必须创建一个zmq上下文context。当您退出应用程序时,必须销毁上下文context。操作上下文context的函数如下图所示:
创建新的zmq上下文:
zmq_ctx_new()
操作上下文属性:
zmq_ctx_set()
zmq_ctx_get()xiao
销毁zmq的上下文:
zmq_ctx_term();

丢弃的一些创建和销毁上下文的接口函数如下:
初始化zmq上下文:
zmq_init()
终结zmq 上下文:
zmq_term()

二、zmq上下文context是线程安全的
zmq上下文context是线程安全,可以在尽可能多的应用程序线程之间共享,不需要调用者任何额外的锁定。
单个zmq套接字并不是线程安全,除了一个套接字从一个线程完整存储块迁移到另一个完整的存储块的情况时发出。在实践中,这意味着应用程序可以在一个线程中使用zmq_socket()创建一个套接字,然后将其传递给新创建的线程,并作为线程初始化的一部分,例如通过将一个结构体作为参数传递给pthread_create()。

三、多上下文情况
多个上下文可能共同存在于一个应用程序中。因此,应用程序可以直接使用zmq同时利用任意数量的附加的库或组件,使用zmq时,只要坚持上述对于线程安全指导方针就可以。

四、通信
zmq消息是一个相同应用的应用程序或组件之间传递数据单元。zmq消息没有内部结构,从zmq本身的角度来看,他们被认为是不透明的二进制数据。

1、下面的接口函数提供用于zmq通信的功能:
初始化一个消息:
zmq_msg_init()
zmq_msg_init_size()
zmq_msg_init_data()

2、发送、接收消息
zmq_msg_send()
zmq_msq_recv()

3、释放消息
zmq_msg_close()

4、访问消息内容
zmq_msg_data()
zmq_msg_size()
zmq_msg_more()

5、属性操作
zmq_msg_get()
zmq_msg_set()

6、消息操作
zmq_msg_copy()
zmq_msg_move()

五、套接字
zmq的socket是异步消息队列的抽象,确切的队列语义取决于使用的套接字类型。了解提供的套接字类型,请查看zmq_socket()。
下面的函数提供套接字操作的功能:
1、创建套接字
zmq_socket()
2、关闭套接字
zmq_close()
3、操作套接字选项
zmq_getsockopt()
zmq_setsockopt()
4、建立消息流
zmq_bind()
zmq_connect()
5、发送、接收消息
zmq_msg_send()
zmq_msg_recv()
zmq_send()
zmq_recv()
zmq_send_const()
6、监控套接字事件
zmq_socket_monitor()

输入输出的多路复用
zmq对应用提供了一种包含zmq套接字和标准套接字之上的输入输出多路复用的机制。这种机制映射了标准套接字的poll()系统调用,zmq_poll()部分描述了的该机制的细节。

六、传输
zmq套接字可以使用多个不同的底层传输机制。每一种传输机制都有某一特定的目的,并且有其自身的优点和缺点。
提供如下的传输机制:
1、使用TCP进行单播传输
zmq_tcp()
2、使用PGM进行可靠的多播传输
zmq_pgm()
3、本地进程间通信传输
zmq_ipc()
4、本地进程内部(线程间)通信传输
zmq_inproc()

七、代理
zmq提供了创建扇出和扇入拓扑的代理。代理将前端套接字连接到后端套接字,并将两个套接字之间的所有消息进行透明的交换。代理可以选择性地将所有流量捕获到第三个套接字。要在应用程序线程中启动代理,请使用zmq_proxy()。

八、安全
zmq套接字可以选择一个安全机制。两个对等点必须使用相同的安全机制。
以下提供了为IPC和TCP连接的安全机制:
1、空安全(null security)
zmq_null()
2、使用用户名和密码进行纯文本认证
zmq_plain()
3、椭圆曲线认证和加密(Elliptic curve authentication and encryption)
zmq_curve()

生成具有armored文本格式的曲线密钥对:zmq_curve_keypair()
将一个armored的密钥转换成一个32字节的二进制密钥:zmq_z85_decode(3)
将一个32字节的二进制曲线密钥转换为一个armored的文本字符串:zmq_z85_encode(3)

九、错误操作
zmq库函数处理错误使用基于POSIX系统上的标准惯例。通常,意味着发生错误后,zmq的库函数要么返回一个NULL值(如果需要返回一个指针时),或者返回一个负值(如果需要返回一个整数),实际的错误码会保存在errno变量中。

在非POSIX系统中,一些用户可能会遇到检索errno变量值的问题。zam_errno()函数可以帮助解决这些问题。

zmq_strerror() 函数提供把zmq特定的错误码转换成错误消息字符串的功能。

十、其他
查看zmq 库的版本
zmq_version()

十一、支持的语言
C++, Python, PHP, Ruby, Java


































阅读全文
0 0