ZeroMQ上我可以拥有的最多主题是什么?

时间:2017-07-31 22:10:27

标签: queue message-queue zeromq distributed-system

我是ZeroMQ的新手(到目前为止我一直在使用SQS)。

我想建立一个系统,每次用户登录时,他们都会订阅队列。订阅此队列的所有用户仅对定向到它们的消息感兴趣。

我读到了主题匹配。我似乎可以创建一个这样的模式:

development.player.234345345
development.player.453423423
integration.player.345354664

并且,每个工作者(用户)都可以订阅队列并只收听他们匹配的主题。即,开发环境中的播放器234345345将仅订阅包含主题development.player.234345345

的消息

这是真的吗?

如果是这样,ZeroMQ会产生什么后果?

我可以拥有多少主题匹配?

2 个答案:

答案 0 :(得分:1)

ZeroMQ有一个关于internals of topic matching works如何的非常详细的页面。看起来您可以拥有任意数量的主题,但主题匹配会产生运行时成本。它应该非常快:

  

我们相信上述算法的应用可以给出一个系统   这将能够匹配或过滤范围内的单个消息   纳秒或几微秒即使是大量的情况   不同的主题和订阅。

但是,您需要注意一些警告:

  

因此,反转位图技术通过预先索引一组来工作   可搜索的项目,以便可以使用a解决搜索请求   最少的操作次数。

     

当且仅当可搜索项目集合是有效的时候   相对于搜索请求的数量而言相对稳定。   否则重新编制索引的成本过高。

简而言之,只要您不经常更改订阅,您至少应该能够完成数千个主题的订购。

答案 1 :(得分:1)

答:是的,你可以

最大。数?更难的部分......

我想阅读Martin SUSTRIK的帖子:

虽然ZeroMQ是自己发展的,但ZeroMQ的共同父亲Martin已经在这个主题上发布了一些有趣的事实here,其中一些进一步的细节和设计视图讨论被here

  

高效订阅匹配

     

在ZeroMQ中,简单的尝试用于存储和匹配PUB / SUB订阅。订阅机制适用于多达10,000个订阅,其中简单的trie运行良好。但是,有些用户使用多达150,000,000个订阅。在这种情况下,需要更有效的数据结构。

值得一读,估计安全区的位置。

另外值得一提的是,并非所有ZeroMQ版本的行为方式都相同。

最近的API使用 PUB -side主题过滤,这对于所有先前版本都不是自动的,其中使用了SUB - 侧过滤。将其转换为所有网络传输,如果所有消息,无论其最终命运如何都被广播到所有SUB - s,只是为了意识到只有一个(用例中的用户)将匹配,所有其余的将由于主题过滤器不匹配而丢弃消息。

因此,您的所有用例都应该考虑到不同的ZeroMQ版本(包括不同的非本地语言绑定和包装) 在同一个操场上相遇和合作。

无论如何,ZeroMQ是一个很好的工具,近年来nanomsg也值得监控和挑战。