2

我一直在使用 qpid,现在我正试图转向减少代理的消息传递系统,但我对 Pub Sub 模式中的网络流量感到非常困惑。我阅读了以下文档: http ://www.250bpm.com/pubsub#toc4 并且真的很困惑订阅转发实际上是如何完成的?

我认为零 mq 必须与底层网络拓扑无关,但似乎并非如此。每个节点如何知道要转发什么和不转发什么(例如:在 eth 网络中,可能有数百万订阅者和发布者,消息树对我来说听起来并不可行。那些甚至不知道零 mq 的存在,他们如何将数据包转发给连接到他们的订阅者,对他们来说这只是一个普通数据包,所以即使是同一个数据包,他们也只会转发多个数据包副本?我不是网络专家所以可能是我遗漏了一些关于消息树的明显内容以及它是如何创建的吗?您能否举一些示例案例,如何创建此分发树以及创建 xpub 和 xsub 套接字的确切节点?

设备(链接中使用的术语)是否类似于代理,在整篇文章中,设备似乎只是任何一般的中间跃点,它对零 mq 套接字(只是一个随机网络跃点)一无所知,如果它确实是经纪人之类的东西,这是否意味着对于 pub sub,消息树中的所有节点都必须满足作为设备的定义,因此它不是一个无故障的设计?

同样在树形图中(来自包含 P、D、C 的链接),我最初假设 C 和 C 是两个订阅者,而 P 是唯一的发布者(D 只是随机跳),但现在似乎我们将 D 作为零 mq 。C 订阅 D 并且 D 订阅 P 吗?或两者都 C 只订阅 P (更通用的是,每个节点是否仅在 中订阅其父节点)。很抱歉这个新手问题,但似乎我在这里遗漏了一些明显的东西,如果有人能提供更多见解,那就太好了。

4

2 回答 2

1

zeromq 使用网络直接在节点之间建立连接(例如通过 tcp),但只在 1 个发送者和 1-n 个接收者之间建立连接。它们是“直接”连接的,并且可以使用底层协议交换消息。

现在,当您在 pub-sub 场景中仅订阅某些事件时,zeromq 用于过滤订阅方的消息,从而导致从发布者到至少多个订阅者的不必要的网络流量。

在较新版本的 zeromq(3.0 和 3.1)中,订阅者进程将其订阅列表发送给发布者,发布者管理订阅者列表和他们感兴趣的主题。因此,发布者可以丢弃任何订阅者也未订阅的消息,并且可能仅向感兴趣的订阅者发送有针对性的消息。

当发布者本身是事件的订阅者(例如转发或路由设备服务)时,它可能会通过类似地订阅其连接的发布者来再次转发这些订阅。

我不确定 zeromq 是否仍然在较新版本中进行客户端过滤,即使它“转发”其订阅也是如此。

于 2012-04-17T15:27:26.683 回答
0

对多个订阅者发布/订阅的一种更有效的机制是使用多播,其中单个消息穿过网络并被所有订阅者接收(然后他们可以过滤他们想要的内容)。

ZeroMQ支持称为实用通用多播的标准化可靠多播

这些参考资料应该让您了解它是如何工作的。请注意,多播通常仅适用于单个子 LAN,并且可能需要路由器配置或 TCP 桥接才能跨越多个子 LAN。

于 2012-04-17T23:19:15.050 回答