XSUB-XPUB 经纪人可以做什么而不是 SUB-PUB 经纪人不能做的?

What can an XSUB-XPUB broker do than a SUB-PUB broker can't?

根据 0MQ 指南,在这种情况下,XSUB-XPUB 代理可以访问与消费者主题订阅相关的(否则隐藏的)消息:

 many publishers (UP) ---> XSUB|broker|XPUB ---> many subscribers (DOWN)

( publications --> )
( <-- topic subscriptions )

但是,如果不需要主题过滤(所有消息发送给所有接收者),那么 SUB-PUB 套接字可用于代理:

many publishers ---> SUB|broker|PUB ---> many subscribers
  1. 这样对吗?

总之。假设使用 XSUB-XPUB 套接字。 XSUB 发布被向下转发到 XPUB(就像在 SUB-PUB 代理版本中一样)以到达消费者。

但是现在,在 XSUB-XPUB 代理版本中,您可以收听 "upward topic subscriptions" 消息(您不能使用 SUB-PUB 代理)。

  1. 在这里,如果您不希望经纪人管理订阅。是否有必要将消息订阅从 X-PUB 转发到 X-SUB? 我猜订阅是在代理的 X-PUB 套接字处有效处理的(而不是在发布者的 PUB 套接字处,因为消费者没有直接连接到生产者)。 如果是这样,答案是否定的。甚至,无需监听 X-PUB 上的主题订阅。对吗?

谢谢

xpub/xsub 代理为您处理订阅和消息复制,以减轻您应用程序的负担。它需要 X,以便订阅消息可以路由回主发布者。

如果您不使用 xpub/xsub 并且希望您的主要发布者处理所有订阅,那么您也可以放弃代理

例如,在下面的情况下,您的应用程序必须 handle/store 3 个订阅并发送每条消息的 3 个副本

    -> SUB
PUB -> SUB
    -> SUB

如果您使用 xpub/xsub 代理,您的发布者只会看到一个订阅,并且每条消息只会发送一份副本。代理 XPUB 套接字现在正在执行所有工作,并且 X 允许第一个订阅通过 XSUB 套接字传播到您的应用程序 PUB 套接字。

                    -> SUB
PUB -> XSUB(BR)XPUB -> SUB
                    -> SUB

假设您有 100 个客户和 1000 个订阅,经纪人(您可以扇出经纪人)允许您扩展。

制作概念验证程序后。

回答 1)。是的,这是对的。在券商,记得做


subSocket.bind( "tcp://*:5001" ) // publishers connect to broker endpoint
subSocket.subscribe( "" ) 

为了获取来自所有发布者的所有消息。

对 2) 的回答 订阅过滤由 XPUB 和 PUB 套接字有效地完成。

使用 XSUB-XPUB 套接字对的原因是将主题订阅(从 XPUB 进入代理)转发给发布者(通过 XSUB),因此代理只获取主题的消息它的任何订阅者都感兴趣。

因此,通过使用 XSUB-XPUB 代理而不是 SUB-PUB 代理,您可以将发布者的消息保存到代理。在这两种情况下,从代理到订阅者的流量是相同的。

因为XSUB-XPUB代理的代码很简单,没有理由不使用这个组合。