5/ZDCF

5/ZDCF

ZeroMQ 设备配置文件

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

许可证

版权所有 (c) 2010-2011 iMatix Corporation 及贡献者

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

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

您应该已随本程序收到一份 GNU 通用公共许可证的副本;如果没有,请参阅 https://gnu.ac.cn/licenses

变更流程

本规范是一个自由开放的标准(见“Definition of a Free and Open Standard”)并受数字标准组织(Digital Standards Organization)的共识导向规范系统(COSS)管辖(见“Consensus Oriented Specification System”)。

语言

本文档中的关键词“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”应按照 RFC 2119 中的描述进行解释(见“Key words for use in RFCs to Indicate Requirement Levels”)。

目标

ZDCF 的目标是

  • 为设备配置提供标准的可重用语义。
  • 允许在任何树形结构语法中进行兼容表达。
  • 尽可能广泛地支持不同的编程语言。
  • 涵盖所有 0MQ 上下文和套接字配置选项。

架构

ZDCF 使用树形结构语义,可以使用任意语法实现,例如 ZPL(见“ZFL Property Language”)、JSON(见“Introducing JSON”)、XML 或其他。一个 ZDCF 文件包含一个可选的上下文对象和零个或多个设备对象。从概念上讲,一个 ZDCF 文件对应一个进程,该进程包含一个单一上下文和零个或多个设备线程。

这是一个以 JSON 表达的典型 ZDCF 文件示例

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

这是以 ZPL 表达的相同属性树(见“ZFL Property Language”)

context
    iothreads = 1
    verbose = 1

main
    type = zmq_queue
    frontend
        type = SUB
        option
            hwm = 1000
            swap = 25000000
        bind = tcp://eth0:5555
    backend
        bind = tcp://eth0:5556

以及简单的 XML 格式

<zdcf>
    <context iothreads = "1" verbose = "1" />
    <main type = "zmq_queue">
        <frontend type = "SUB">
            <option hwm = "1000" swap = "25000000" />
            <bind>tcp://eth0:5555</bind>
        </frontend>
        <backend>
            <bind>tcp://eth0:5556</bind>
        </backend>
    </main>
</zdcf>

ZDCF 树可以为空;这是一个有效的 JSON 指定文件

{
}

上下文对象

上下文对象是可选的,并具有以下属性

  • 其名称为“context”。
  • “iothreads” - (整数) - 指定上下文的 I/O 线程数。如果未指定,则默认为 1。
  • “verbose” - (布尔值) - 如果为“true”,则解析 JSON 的程序应输出跟踪信息。如果未指定,则默认为“false”。

设备对象

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

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

撰写本文时存在的内置设备类型有

  • “zmq_queue” - ZMQ_QUEUE
  • “zmq_forwarder” - ZMQ_FORWARDER
  • “zmq_streamer” - ZMQ_STREAMER

详情请参阅 zmq_device(3)

套接字对象

套接字对象可以在设备对象中出现零次或多次,并具有以下属性

  • 名称可以是除“type”之外的任何值。
  • “type” - (字符串) - 指定套接字类型。
  • “bind” - (字符串) - 指定要绑定套接字的零个或多个端点。
  • “connect” - (字符串) - 指定要连接套接字的零个或多个端点。
  • “option” - (对象) - 指定套接字的配置。

撰写本文时存在的套接字类型有

  • “sub” - ZMQ_SUB
  • “pub” - ZMQ_PUB
  • “req” - ZMQ_REQ
  • “rep” - ZMQ_REP
  • “xreq” - ZMQ_XREQ
  • “xrep” - ZMQ_XREP
  • “push” - ZMQ_PUSH
  • “pull” - ZMQ_PULL
  • “pair” - ZMQ_PAIR

详情请参阅 zmq_socket(3)

选项对象

选项对象在套接字对象中是可选的。它具有以下属性

  • 其名称为“option”。
  • “hwm” - (整数) - 指定 ZMQ_HWM 选项。
  • “swap” - (整数) - 指定 ZMQ_SWAP 选项。
  • “affinity” - (整数) - 指定 ZMQ_AFFINITY 选项。
  • “identity” - (字符串) - 指定 ZMQ_IDENTITY 选项。
  • “subscribe” - (字符串) - 指定 ZMQ_SUBSCRIBE 选项。
  • “rate” - (整数) - 指定 ZMQ_RATE 选项。
  • “recovery_ivl” - (整数) - 指定 ZMQ_RECOVERY_IVL 选项。
  • “mcast_loop” - (布尔值) - 指定 ZMQ_MCAST_LOOP 选项。
  • “sndbuf” - (整数) - 指定 ZMQ_SNDBUF 选项。
  • “rcvbuf” - (整数) - 指定 ZMQ_RCVBUF 选项。

详情请参阅 zmq_setsockopt(3)

值数组

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

  • 套接字的“bind”属性。
  • 套接字的“connect”属性。
  • 选项的“subscribe”属性。

例如

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