【问题标题】:Best approach for multiple envelopes in ZeroMQ pub/sub pattern?ZeroMQ 发布/订阅模式中多个信封的最佳方法?
【发布时间】:2013-05-03 17:22:49
【问题描述】:

我正在尝试使用 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,我只会看到与所有三个订阅者键匹配的消息,而不必手动检查我是否'在对消息进行任何操作之前,我对消息感兴趣。

【问题讨论】:

    标签: zeromq publish-subscribe


    【解决方案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 都被指定为特殊情况的情况。

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多