XSUB-XPUB代理可以做什么而不是SUB-PUB经纪人呢?

时间:2018-02-01 15:54:57

标签: zeromq publish-subscribe

根据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. 这是对的吗?
  2. 反正。假设使用了XSUB-XPUB套接字。 XSUB出版物被转发到XPUB(就像在SUB-PUB经纪人版本中一样)以接触消费者。

    但是现在,在XSUB-XPUB代理版本中,您可以收听&#34;向上主题订阅&#34;消息(您不能使用SUB-PUB代理执行此操作)。

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

2 个答案:

答案 0 :(得分:1)

制作概念验证程序后。

回答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代理的代码很简单,所以没有理由不使用这种组合。

答案 1 :(得分:0)

xpub / xsub代理处理订阅和消息重复,以便您从应用程序中省去精力。它需要X,因此订阅消息可以路由回主发布者。

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

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

    -> SUB
PUB -> SUB
    -> SUB

如果您使用xpub / xsub代理,则您的发布者只能查看一个订阅,并且只会发送每封邮件的一个副本。经纪人XPUB套接字现在正在完成所有工作,X允许第一个订阅通过XSUB套接字传播到你的应用程序PUB套接字。

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

想象一下,你有100个客户和1000个订阅,经纪人(你可以扇出经纪人)可以让你扩展。