ZeroMQ pub / sub模式中多个包络的最佳方法?

时间:2013-05-03 17:22:50

标签: zeromq publish-subscribe

我正在尝试使用ZeroMQ设计pub / sub架构,我想最大限度地利用ZMQ对订阅者的内部过滤。

在ZMQ中处理多个邮件信封的最佳方法是什么,以便接收订阅者只能看到与其感兴趣的所有信封相匹配的邮件?

作为一个示例层次结构,假设我有一个UniverseID,一个SessionID和一个MessageTypeID,我想找到给定会话和Universe的给定类型的所有MessageTypeID,如下所示:

UniverseID (Subscriber Key, Example = 42)
    SessionID (Subscriber Key, Example = 4)
        MessageTypeID (Subscriber Key, Example = 2)
           Message (Actual Message)

ZMQ中是否有一种过滤消息的方法,例如具有多个帧的“分层过滤器”,或者是在单个包络帧内构建单个密钥的最佳方式(即“UniverseID.SessionID.MessageTypeID” 或在我们的示例中“42.4.2”)?

最终目标是在ZMQ之外对订户进行零过滤,这样如果我在套接字上调用zmq_recv,我只会看到与所有三个订户密钥匹配的消息,而不必手动检查我是否'我对这个消息感兴趣,然后再做任何事情。

1 个答案:

答案 0 :(得分:1)

  

在ZMQ中是否有一种过滤消息的方式,如“分层”   过滤“有多个框架或是构建单个密钥的最佳方法   在一个信封框架内(即   “UniverseID.SessionID.MessageTypeID”或我们的示例“42.4.2”)?

这是要走的路(稍作修改)。

  • 如果您想要所有消息,请订阅无前缀。
  • 如果您想要所有包含UniverseID A的邮件,请使用前缀A.
  • 进行订阅
  • 如果您想要所有包含UniverseID A和SessionID B的邮件,请使用前缀A.B.订阅
  • 如果您想要所有包含UniverseID A,SessionID B和MessageTypeID C的邮件,请使用前缀A.B.C.订阅

请注意我添加到密钥末尾的最终.。这就是说,当所有ID都被指定为特殊情况时,您不必处理这种情况。

相关问题