Pub Sub实现零mq 3.xx

时间:2012-04-17 00:32:14

标签: sockets network-programming publish-subscribe zeromq messagebroker

我一直在使用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吗?或者两者都只是订阅P(更通用,每个节点只在其中订阅其父节点)。对不起新手的问题,但似乎我在这里显而易见的东西上缺失了,如果有人可以提供更多的见解会很好。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

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

ZeroMQ supports标准化的可靠多播称为Pragmatic General Multicast

这些参考文献应该让您了解它是如何工作的。请注意,组播通常只能在单个子LAN上运行,并且可能需要路由器配置或TCP网桥来跨越多个子LAN。

相关问题