ZeroMQ pub-sub类别:可以为多个订阅使用外卡吗?

时间:2013-03-21 07:18:59

标签: zeromq publish-subscribe

我一直在阅读ZeroMQ文档,我想知道是否有办法使用外卡订阅?我需要一个系统,您可以在ABC上发布,然后订阅A。*。C或AB *(即A。*上的订阅.C将匹配出版物ABC,AXC,AYC等。

3 个答案:

答案 0 :(得分:0)

ZeroMQ PUB/SUB执行前缀匹配。所以A.B. *很好(在你的例子中将匹配A.B.C) 由于显而易见的原因(订阅存储在特里数据结构中),不支持“就地匹配”[http://www.250bpm.com/blog:19]

答案 1 :(得分:0)

直接?第
间接?哦,当然,先生!

.setsockopt( zmq.SUBSCRIBE, ... )方法的ZeroMQ语法本身不允许设置其他但前缀匹配的主题过滤器订阅。由于Martin SUSTRIK和Pieter HINTJENS多次提到的性能原因,过滤内部使用的技术不允许更复杂的字符串/解析。

一个有趣的事情来自于这样的副作用 - 人们无法避免扩展的字符串,超出主题过滤器长度,从积极匹配,从而被传递。

这并不意味着,我们将放弃。众所周知,ZeroMQ可以运行数千种物品,所以让我们利用魔法的这一面。

如何设置像"A.*.C"

这样的过滤器

一种方法可能是使用一种相当幼稚(温和)的力量并“机械地”设置正式过滤器“A。*。C”的所有可能的“扩展” - 即:

for aWildcardToEXPAND_item in ( "A", "B", "C", "D", ... ): # all legal expansions
    aSUB.setsockopt( zmq.SUBSCRIBE, "A.{0:%s}.C".format( aWildcardToEXPAND_item ) )
pass; # just-SEQ life is great & so forgiving :o)

许多方式更智能,装饰,使用上下文的专用迭代器可能有助于将其扩展到简单的设置/丢弃扩展/订阅迭代器,这将满足您的所有需求,所以不要犹豫,前进,它是可行的。

答案 2 :(得分:0)

您可以在进程中的 zmq 套接字中订阅 "",然后在那里实现更高级的过滤器,作为代理执行线程,广告接收执行过滤请求的实际 XPUB 套接字。

相关问题