我是ZeroMQ的新手(到目前为止我一直在使用SQS)。
我想建立一个系统,每次用户登录时,他们都会订阅队列。订阅此队列的所有用户仅对定向到它们的消息感兴趣。
我读到了主题匹配。我似乎可以创建一个这样的模式:
development.player.234345345
development.player.453423423
integration.player.345354664
并且,每个工作者(用户)都可以订阅队列并只收听他们匹配的主题。即,开发环境中的播放器234345345将仅订阅包含主题development.player.234345345
这是真的吗?
如果是这样,ZeroMQ会产生什么后果?
我可以拥有多少主题匹配?
答案 0 :(得分:1)
ZeroMQ有一个关于internals of topic matching works如何的非常详细的页面。看起来您可以拥有任意数量的主题,但主题匹配会产生运行时成本。它应该非常快:
我们相信上述算法的应用可以给出一个系统 这将能够匹配或过滤范围内的单个消息 纳秒或几微秒即使是大量的情况 不同的主题和订阅。
但是,您需要注意一些警告:
因此,反转位图技术通过预先索引一组来工作 可搜索的项目,以便可以使用a解决搜索请求 最少的操作次数。
当且仅当可搜索项目集合是有效的时候 相对于搜索请求的数量而言相对稳定。 否则重新编制索引的成本过高。
简而言之,只要您不经常更改订阅,您至少应该能够完成数千个主题的订购。
答案 1 :(得分:1)
最大。数?更难的部分......
虽然ZeroMQ是自己发展的,但ZeroMQ的共同父亲Martin已经在这个主题上发布了一些有趣的事实here,其中一些进一步的细节和设计视图讨论被here
高效订阅匹配
在ZeroMQ中,简单的尝试用于存储和匹配PUB / SUB订阅。订阅机制适用于多达10,000个订阅,其中简单的trie运行良好。但是,有些用户使用多达150,000,000个订阅。在这种情况下,需要更有效的数据结构。
值得一读,估计安全区的位置。
最近的API使用 PUB
-side主题过滤,这对于所有先前版本都不是自动的,其中使用了SUB
- 侧过滤。将其转换为所有网络传输,如果所有消息,无论其最终命运如何都被广播到所有SUB
- s,只是为了意识到只有一个(用例中的用户)将匹配,所有其余的将由于主题过滤器不匹配而丢弃消息。
因此,您的所有用例都应该考虑到不同的ZeroMQ版本(包括不同的非本地语言绑定和包装) 在同一个操场上相遇和合作。
无论如何,ZeroMQ是一个很好的工具,近年来nanomsg也值得监控和挑战。