zeromq - ZeroMQ 发布/订阅模式中多个信封的最佳方法?

标签 zeromq publish-subscribe

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

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

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

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

ZMQ 中是否有一种方法可以过滤消息,例如具有多个帧的“分层过滤器”,或者是在单个信封帧中构建单个 key 的最佳方法(即作为“UniverseID.SessionID.MessageTypeID”或在我们的示例中为“42.4”) .2")?

最终目标是让 ZMQ 之外的订阅者完成零过滤,这样如果我在我的套接字上调用 zmq_recv,我只会看到匹配所有三个订阅者 key 的消息,而不必手动检查我是否感兴趣在对消息做任何事情之前。

最佳答案

Is there a way in ZMQ of filtering the messages like a "layered filter" with multiple frames or is the best way to build a single key within a single envelope frame (i.e. as "UniverseID.SessionID.MessageTypeID" or in our example "42.4.2")?



这是要走的路(只需稍作修改)。
  • 如果您想要所有消息,请不带前缀订阅。
  • 如果您想要所有带有 UniverseID A 的消息,请使用前缀 A. 订阅
  • 如果您想要所有带有 UniverseID A 和 SessionID B 的消息,请使用前缀 A.B. 订阅。
  • 如果您想要所有具有 UniverseID A、SessionID B 和 MessageTypeID C 的消息,请使用前缀 A.B.C. 订阅。

  • 注意添加了最后的 .我已添加到 key 的末尾。这只是为了让您不必将所有 ID 都指定为特殊情况的情况处理。

    关于zeromq - ZeroMQ 发布/订阅模式中多个信封的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364455/

    相关文章:

    rabbitmq - RabbitMQ 的 "x-expires"参数的 ZeroMQ 等价物是什么?

    python - python 和 scala 之间的 zeromq 请求-回复模式

    asp.net - 直接从 Angular 客户端订阅 Azure 事件网格主题

    javascript - Backbone Marionette - 根据传入数据更新 View 对象

    model-view-controller - 观察者、发布/订阅和数据绑定(bind)之间的区别

    c++ - ZMQ异步,具体是如何工作的?

    c++ - zeromq 在 I/O 线程中引发异常

    javascript - NodeJS ZeroMQ - 连接后生产者何时准备好发送消息?

    c++ - 从 Turtlesim 订阅和发布几何/扭曲消息