根据0MQ指南,在这种情况下,XSUB-XPUB代理可以访问消费者与主题订阅相关的(否则隐藏)消息:
many publishers (UP) ---> XSUB|broker|XPUB ---> many subscribers (DOWN)
( publications --> )
( <-- topic subscriptions )
但是,如果不需要主题过滤(发送给所有收件人的所有邮件),则SUB-PUB套接字可用于代理:
many publishers ---> SUB|broker|PUB ---> many subscribers
反正。假设使用了XSUB-XPUB套接字。 XSUB出版物被转发到XPUB(就像在SUB-PUB经纪人版本中一样)以接触消费者。
但是现在,在XSUB-XPUB代理版本中,您可以收听&#34;向上主题订阅&#34;消息(您不能使用SUB-PUB代理执行此操作)。
由于
答案 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个订阅,经纪人(你可以扇出经纪人)可以让你扩展。