3

我正在尝试使用 ZeroMQ 设计一个发布/订阅架构,并且我想最大限度地利用 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,我只会看到匹配所有三个订阅者键的消息,而不必手动检查我是否感兴趣在对它做任何事情之前的消息。

4

1 回答 1

2

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.

.注意我添加到密钥末尾的final 。这样您就不必处理所有 ID 都被指定为特殊情况的情况。

于 2013-05-03T19:28:15.230 回答