初探ZeroMQ(三) 发布-订阅模式中套结字总结

来源:互联网 发布:杨幂对赌协议知乎 编辑:程序博客网 时间:2024/05/21 12:40

参考资料:ØMQ - The Guide(英文)
参考资料:ØMQ - The Guide(中文)
本文主要介绍和总结在发布-订阅模式中各种套结字的行为.


套结字简介:

PUB: 多播套结字,只能发送消息给SUB/XSUB,不能接收消息
XPUB: 多播套结字,既能发送消息给SUB/XSUB,也可以接收来自XSUB的消息
SUB: 接收套结字,只能接收来自PUB/XPUB的消息,不能发送消息
XSUB: 接收套结字,既能接收来自PUB/XPUB的消息,也能发送消息给XPUB


以下是译文,原文地址:http://rfc.zeromq.org/spec:29

发布-订阅模式

该模式用于事件和数据分配,通常是从少数发布者到大量订阅者的,但是也可以从大量发布者到少量用户。对于多对多的使用场景,该模式提供原始套接字类型(XPUB,XSUB)来建设分销代理(distribution proxies),也叫经纪人(broker)。
确切的订阅和过滤机制依赖于传输协议,并在相关文件中定义。对于TCP,参考地址http://rfc.zeromq.org/spec:23/ZMTP.

PUB 套结字类型

PUB套接字类型提供了基本的向一组用户的单向广播。通过TCP,它会对传出的消息进行过滤,尽管如此,一个消息仍将被发送多次,使其到达多个订阅者。 PUB主要用于瞬态事件分布,其中该网络的稳定性比流量的可靠性更重要。

常规行为:

-可以被任意数量的SUB或XSUB订阅者连接,它只发送消息.-将会为每个建立连接的订阅者维持一个传出队列.-将在启动一个到订阅者的连接的时候创建一个传出队列,不管连接是否建立,它都包含则这个队列.-当订阅者连接到PUB的时候,PUB套结字将创建一个传出队列,如果订阅者断开连接,PUB套结字将会摧毁该订阅者的传出队列,并且丢弃掉队列中的消息-应该限制运行时传出队列的大小-将会默默的丢弃掉订阅者发给它的任何消息.

处理传出数据:

-将不会以任何方式修改传出的消息.-依赖于传输,可能发送所有消息给所有订阅者-依赖于传输,可能仅仅发送消息给匹配的订阅者-将会针对订阅消息的第一个结构进行一个二进制的比较-如果传出队列已满,将会默默的丢弃掉所有的消息.-将不会阻塞在消息发送上.

处理传入数据:

-根据使用的传输协议,PUB将会接收来自订阅者的订阅请求和取消订阅请求.-将不会传递这些订阅命令给应用程序

XPUB 套结字类型

XPUB套接字类型扩展了PUB套结字不能接收来自匿名用户信息的能力,并且将订阅命令暴露给应用程序。 XPUB通常用于在代理中,但对高级应用程序也是有用的。

常规行为:

-可以被任意数量的SUB或XSUB订阅者连接,它既能发送消息,也能接收消息.-将会为每个建立连接的订阅者维持两个队列(传入/传出队列).-将在启动一个到订阅者的连接的时候维持两个队列,不管连接是否建立,它都包含则这两个队列.-当订阅者连接到XPUB的时候,XPUB套结字将创建两个队列,如果订阅者断开连接,XPUB套结字将会摧毁为该订阅者维持的两个队列,并且丢弃掉队列中的消息-应该限制运行时传出队列的大小-将会默默的丢弃掉订阅者发给它的任何消息.

处理传出的消息:

-将不会以任何方式修改传出的消息.-依赖于传输,可能发送所有消息给所有订阅者-依赖于传输,可能仅仅发送消息给匹配的订阅者-将会针对订阅消息的第一个结构进行一个二进制的比较-如果传出队列已满,将会默默的丢弃掉所有的消息.-将不会阻塞在消息发送上.

处理传入的消息:

-将采用公平队列策略接收来自订阅者的消息-将会传递这些消息给应用程序

处理订阅:

-根据使用的传输协议,PUB将会接收来自订阅者的订阅请求和取消订阅请求.-将会传递这些命令给它的调用程序-可能会根据配置信息规范传递给调用程序的命名, 以便使多个相同的订阅仅仅使用一个命令-如果订阅者过早断开连接,XPUB将会为调用程序生成合适的退订请求。

The SUB Socket Type

SUB套接字类型提供了向一组发布者的基本单向监听。

常规行为:

-可以主动连接到任意数量的PUB,XPUB发布者,仅仅接收消息-将会为每个建立连接的发布者维持一个传入消息队列-将在启动一个到发布者的连接的时候维持一个传入队列,不管连接是否建立,它都包含则这个队列.-当订阅者连接到SUB的时候,SUB套结字将创建一个传入队列,如果发布者断开连接,SUB套结字将会摧毁该发布者的传入队列,并且丢弃掉队列中的消息-应该限制运行时传出队列的大小

处理传入的消息:

-如果为发布者维护的队列已满,将默默的丢弃后来的消息-将会才用公平队列策略接收来自发布者的消息-不会以任何方式修改传入的消息-可能根据前缀匹配算法和订阅消息,以此来过滤消息-将会传递消息给应用程序

处理传出的消息:

-根据使用的传输协议,SUB将会发送订阅请求和取消订阅请求到发布者

The XSUB Socket Type

XSUB套接字类型扩展SUB套结字不能给上游发布者发送消息和订阅命令的能力。 XSUB通常用于在代理而且对高级应用程序也是有用的。

常规行为:

-可以主动连接到任意数量的PUB或XPUB发布者,它既能发送消息,也能接收消息.-将会为每个建立连接的订阅者维持两个队列(传入/传出队列).-将在启动一个到发布者的连接的时候维持两个队列,不管连接是否建立,它都包含则这两个队列.-当发布者连接到XSUB的时候,XSUB套结字将创建两个队列,如果发布者断开连接,XSUB套结字将会摧毁为该发布者维持的两个队列,并且丢弃掉队列中的消息-应该限制运行时传出队列的大小-将会默默的丢弃掉订阅者发给它的任何消息.

处理传入的消息:

-如果为发布者维护的输入队列已满,将默默的丢弃后来的消息-将会才用公平队列策略接收来自发布者的消息-不会以任何方式修改传入的消息-可能根据前缀匹配算法和订阅消息,以此来过滤消息-将会传递消息给应用程序

处理传出的消息:

-不会以任何方式修改传出的消息-将会发送所有的消息给所有建立连接的发布者-如果为发布者维护的输出队列已满,将默默的丢弃后来的消息-将不会阻塞在消息发送上

处理订阅:

-将会接收来自应用程序的订阅命令-根据使用的传输协议,XSUB将会发送订阅请求和取消订阅请求到发布者-当关闭一个到发布者的连接的时候,应该发送取消订阅请求给所有的订阅.
1 0