2013-05-03 80 views
2

我正试图用ZeroMQ设计一个pub/sub体系结构,并且我想最大限度地使用ZMQ的用户内部过滤。ZeroMQ pub/sub模式中的多个信封的最佳方法?

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

举个例子层次结构,比方说我有一个UniverseID,一个会话ID和MessageTypeID,我想找到所有给定类型的MessageTypeIDs的给定会话和宇宙,就像这样:

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

是否有ZMQ的方式的滤波像中的消息“分层 滤波器”具有多个帧或是单个信封帧(即内建立一个单一的键 作为 “UniverseID.SessionID的最佳方式.MessageTypeID“或在我们的例子”42.4.2“)?

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

  • 如果你想要所有的消息,订阅没有前缀。
  • 如果你想与UniverseID A中的所有邮件,订阅前缀为A.
  • 如果你想与UniverseID A和SessionID的B中的所有信息,以前缀A.B.
  • 订阅如果你想与UniverseID A,会话ID的所有消息B,和MessageTypeID C,认购带有前缀A.B.C.

注意此外,我已经加入到了关键的最后的最后.的。这就是说,当所有ID被指定为特殊情况时,您不必处理该案例。