3/ZDCF

3/ZDCF

ZeroMQ 设备配置文件

ZeroMQ 设备配置文件格式(ZDCF)指定了一种配置 0MQ 设备的标准语法。它提供了用于配置 0MQ Context 和一组 0MQ Socket 的信息。本规范旨在使共享和重用设备以及构建设备管理系统变得更容易。

许可证

版权所有 (c) 2010 iMatix Corporation 和贡献者

本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证(或您选择的任何后续版本)的条款重新分发和/或修改它。

分发本规范是希望它有用,但没有任何担保;甚至不包括适销性或特定用途适用性的默示担保。更多详细信息请参阅 GNU 通用公共许可证。

您应该已经随此程序收到一份 GNU 通用公共许可证的副本;如果未收到,请访问 https://gnu.ac.cn/licenses

变更流程

本规范是一个自由开放的标准(参见“自由开放标准的定义”)并受数字标准组织(Digital Standards Organization)的共识导向规范系统(COSS)管辖(参见“共识导向规范系统”)。

语言

本文档中的关键词“MUST”(必须)、“MUST NOT”(不得)、“REQUIRED”(必需)、“SHALL”(应)、“SHALL NOT”(不应)、“SHOULD”(应该)、“SHOULD NOT”(不应)、“RECOMMENDED”(推荐)、“MAY”(可以)和“OPTIONAL”(可选)应按照 RFC 2119 中的描述进行解释(参见“RFC 中表示需求级别的关键词”)。

目标

ZDCF 旨在

  • 提供一种用于设备配置的标准可重用格式。
  • 尽可能广泛地适用于不同的编程语言。
  • 平台中立。
  • 易于阅读和编辑。
  • 处理起来轻量化。
  • 涵盖所有 0MQ Context 和 Socket 配置选项。

架构

ZDCF 是一种 JSON(参见“Introducing JSON”)格式。ZDCF 文件包含一个可选的 Context 对象和零个或多个 Device 对象。概念上,一个 ZDCF 文件对应一个进程,该进程包含一个 Context 和零个或多个 Device 线程。

下面是一个典型的 ZDCF 文件示例

{
    "context": {
        "iothreads": 1,
        "verbose": true
    },
    "main" : {
        "type": "queue",
        "frontend": {
            "option": {
                "hwm": 1000,
                "swap": 25000000
            },
            "bind": "tcp://eth0:5555"
        },
        "backend": {
            "bind": "tcp://eth0:5556"
        }
    }
}

这也是一个有效的 ZDCF 文件

{
}

Context 对象

Context 对象是可选的,具有以下属性

  • 其名称为 “context”。
  • “iothreads” - (integer) - 指定 Context 的 I/O 线程数。如果未指定,默认为 1。
  • “verbose” - (Boolean) - 如果为 “true”,解析 JSON 的程序应输出跟踪信息。如果未指定,默认为 “false”。

Device 对象

Device 对象可以出现零次或多次,并具有以下属性

  • 名称可以是除 “context” 以外的任何值。
  • “type” - (string) - 指定 Device 类型。以 “z” 开头的类型保留用于内置的 0MQ Device。应用程序可以根据需要定义其他 Device 类型。
  • 零个或多个 Socket 对象。

Socket 对象

Socket 对象可以在 Device 对象内出现零次或多次,并具有以下属性

  • 名称可以是除 “type” 以外的任何值。
  • “bind” - (string) - 指定要将 Socket 绑定到的零个或多个端点。
  • “connect” - (string) - 指定要将 Socket 连接到的零个或多个端点。
  • “option” - (object) - 指定 Socket 的配置。

Option 对象

Option 对象在 Socket 对象内部是可选的。它具有以下属性

  • 其名称为 “option”。
  • “hwm” - (integer) - 指定 ZMQ_HWM 选项。
  • “swap” - (integer) - 指定 ZMQ_SWAP 选项。
  • “affinity” - (integer) - 指定 ZMQ_AFFINITY 选项。
  • “identity” - (string) - 指定 ZMQ_IDENTITY 选项。
  • “subscribe” - (string) - 指定 ZMQ_SUBSCRIBE 选项。
  • “rate” - (integer) - 指定 ZMQ_RATE 选项。
  • “recovery_ivl” - (integer) - 指定 ZMQ_RECOVERY_IVL 选项。
  • “mcast_loop” - (Boolean) - 指定 ZMQ_MCAST_LOOP 选项。
  • “sndbuf” - (integer) - 指定 ZMQ_SNDBUF 选项。
  • “rcvbuf” - (integer) - 指定 ZMQ_RCVBUF 选项。

更多详情请参阅 zmq_setsockopt(3)

值数组

在有意义的地方,属性可以指定为值数组,至少包括

  • Socket 的 “bind” 属性。
  • Socket 的 “connect” 属性。
  • Option 的 “subscribe” 属性。

例如

    "frontend": {
        "option": {
            "subscribe": [ "10001", "10002" ]
        },
        "bind": [ "tcp://eth0:5555", "inproc://device" ]
    }

内置 Device 类型

编写时存在的内置 Device 类型有

  • “zqueue” - ZMQ_QUEUE
  • “zforwarder” - ZMQ_FORWARDER
  • “zstreamer” - ZMQ_STREAMER

更多详情请参阅 zmq_device(3)