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
- 这样对吗?
总之。假设使用 XSUB-XPUB 套接字。 XSUB 发布被向下转发到 XPUB(就像在 SUB-PUB 代理版本中一样)以到达消费者。
但是现在,在 XSUB-XPUB 代理版本中,您可以收听 "upward topic subscriptions" 消息(您不能使用 SUB-PUB 代理)。
- 在这里,如果您不希望经纪人管理订阅。是否有必要将消息订阅从 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代理的代码很简单,没有理由不使用这个组合。
根据 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 代理版本中,您可以收听 "upward topic subscriptions" 消息(您不能使用 SUB-PUB 代理)。
- 在这里,如果您不希望经纪人管理订阅。是否有必要将消息订阅从 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代理的代码很简单,没有理由不使用这个组合。