6 个版本

0.5.0-beta.72021年2月4日
0.5.0-beta.52020年11月2日
0.5.0-beta.42020年10月30日
0.5.0-beta.22020年9月22日

#8#边缘计算

21 每月下载量

EPL-2.0 OR Apache-2.0

465KB
10K SLoC

CI Documentation Status Discussion Discord License License

Eclipse Zenoh

Eclipse Zenoh:零开销 Pub/sub,存储/查询和计算。

Zenoh(发音为 /zeno/)统一了数据在运动、数据在静止和计算。它将传统的 pub/sub 与地理分布的存储、查询和计算巧妙地结合在一起,同时保持了超出任何主流堆栈的时间和空间效率。

请访问网站 zenoh.io路线图 获取更多信息。


入门

Zenoh 非常易于学习,掌握基础知识最好的地方是我们的 入门指南


如何安装

要安装 Zenoh 路由器(zenohd)及其默认插件(REST API 插件和存储管理器插件),您可以按照以下步骤操作

手动安装(所有平台)

所有发布包都可以从以下地址下载

每个子目录都有 Rust 目标的名称。请参阅 https://doc.rust-lang.net.cn/stable/rustc/platform-support.html 上每个目标对应的平台

选择您的平台并下载 .zip 文件。
将其解压缩到您想要的位置,并运行提取的 zenohd 二进制文件。

Linux Debian

将 Eclipse Zenoh 私有仓库添加到源列表,并安装 zenoh 软件包

echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list.d/zenoh.list > /dev/null
sudo apt update
sudo apt install zenoh

然后您就可以开始运行 zenohd

MacOS

点击我们的 brew 包仓库,并安装 zenoh 公式

brew tap eclipse-zenoh/homebrew-zenoh
brew install zenoh

然后您就可以开始运行 zenohd

Rust API


如何构建它

[!WARNING] Zenoh及其生态系统正在积极开发中。当您从git构建时,请确保您还构建了您计划使用的任何其他Zenoh仓库(例如,绑定、插件、后端等)。可能会发生git中的某些更改与最新打包的Zenoh版本不兼容的情况(例如,deb、docker、pip)。我们在维护Zenoh项目中各个git仓库之间的兼容性方面付出了特别努力。

安装 Cargo和Rust。Zenoh可以使用Rust稳定版本(>= 1.71.0)成功编译,因此您不需要进行特殊配置。如果您已经安装了Rust工具链,请确保它与以下版本保持最新

$ rustup update

在遵循前面的说明后,只需输入以下命令即可构建Zenoh

$ cargo build --release --all-targets

Zenoh的路由器构建为 target/release/zenohd。所有示例都构建在 target/release/examples 目录中。它们都可以在点对点模式下工作,或者通过Zenoh路由器相互连接。


快速测试您的构建

点对点测试

  • pub/sub

    • 运行: ./target/release/examples/z_sub
    • 在另一个shell中运行: ./target/release/examples/z_put
    • 订阅者应该收到发布的内容。
  • get/queryable

    • 运行: ./target/release/examples/z_queryable
    • 在另一个shell中运行: ./target/release/examples/z_get
    • 可查询的应该在其监听器中显示日志,get应该接收到可查询的结果。

路由测试

[!NOTE] Windows用户:要在PowerShell中正确执行以下命令,您需要将以下字符 " 转义为 \"

  • put/store/get

    • 使用内存存储运行Zenoh路由器
      ./target/release/zenohd --cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'
    • 在另一个shell中运行: ./target/release/examples/z_put
    • 然后运行 ./target/release/examples/z_get
    • get应该接收到存储的发布内容。
  • 使用 curl 工具的REST API

    • 使用内存存储运行Zenoh路由器
      ./target/release/zenohd --cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'
    • 在另一个shell中,通过REST API进行发布
      curl -XPUT -d '"Hello World!"'https://127.0.0.1:8000/demo/example/test
    • 通过REST API获取它
      curlhttps://127.0.0.1:8000/demo/example/test
  • 通过REST API的路由器管理空间

    • 运行Zenoh路由器,并具有通过管理空间执行配置更改的权限,以及具有内存存储
      ./target/release/zenohd --adminspace-permissions=rw --cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'
    • 在另一个shell中,通过zenoh管理空间获取zenoh路由器的信息
      curlhttps://127.0.0.1:8000/@/router/local
    • 获取路由器的卷(默认情况下只有内存)
      curl'http://localhost:8000/@/router/local/**/volumes/*'
    • 获取本地路由器的存储(启动时在'/demo/example/**'上配置的内存存储应该存在)
      curl'http://localhost:8000/@/router/local/**/storages/*'
    • /demo/mystore/** 上添加另一个内存存储
      curl -XPUT -H 'content-type:application/json' -d '{"key_expr":"demo/mystore/**","volume":"memory"}'https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/storages/mystore
    • 检查它是否已创建
      curl'http://localhost:8000/@/router/local/**/storages/*'

配置选项

可以通过CLI为所有Zenoh示例和Zenoh路由器提供Zenoh配置文件。

请参考examples/中的其他Zenoh使用示例。


Zenoh路由器命令行参数

zenohd接受以下参数

  • --adminspace-permissions <[r|w|rw|none]>: 配置管理员空间的读写权限。默认为只读。

  • -c, --config <FILE>: 一个 JSON5 配置文件。 DEFAULT_CONFIG.json5 展示了该文件的架构。所有配置属性都是可选的,所以你可能不需要为你的用例创建如此庞大的配置。

  • --cfg <KEY>:<VALUE>: 允许你修改配置构建之后的具体部分。VALUE必须是有效的JSON5值,key必须是配置文件的路径,其中每个元素由一个 / 分隔。当在配置的数组部分插入时,可以使用索引,也可以使用 + 来表示你想要将值追加到数组中。传递给 --cfg 的值将始终覆盖配置中其键的任何先前存在的值。

  • -l, --listen <ENDPOINT>...: 该路由器将监听此端点的传入会话。重复此选项以打开多个监听器。默认情况下,使用 tcp/[::]:7447。以下端点是当前支持的

    • TCP: tcp/<host_name_or_IPv4_or_IPv6>:<port>
    • UDP: udp/<host_name_or_IPv4_or_IPv6>:<port>
    • TCP+TLS: tls/<host_name>:<port>
    • QUIC: quic/<host_name>:<port>
  • -e, --connect <ENDPOINT>...:此路由器将尝试连接的端点。重复此选项可连接到多个对等方或路由器。

  • --no-multicast-scouting:默认情况下,zenohd 会回复多播侦察消息以便对等方和客户端发现。此选项禁用此功能。

  • -i, --id <hex_string>:zenohd 必须使用的标识符(十六进制字符串形式 - 例如:A0B23...)。警告:此标识符必须在系统中是唯一的!如果未设置,将使用一个随机的无符号 128 位整数。

  • --no-timestamp:默认情况下,zenohd 会为每个路由数据添加 HLC 生成的时间戳,如果该数据没有时间戳。此选项禁用此功能。

  • -P, --plugin [<PLUGIN_NAME> | <PLUGIN_NAME>:<LIBRARY_PATH>]...:必须加载的插件。接受的值

    • 插件名称;zenohd 将在 Unix 上搜索名为 libzenoh_plugin_<name>.so 的库,在 MacOS 上为 libzenoh_plugin_<PLUGIN_NAME>.dylib,在 Windows 上为 zenoh_plugin_<PLUGIN_NAME>.dll
    • "<PLUGIN_NAME>:<LIBRARY_PATH>";插件将从位于 <LIBRARY_PATH> 的库文件中加载。

    重复此选项以加载多个插件。

  • --plugin-search-dir <DIRECTORY>...:要搜索以加载插件库的目录。重复此选项以指定多个搜索目录。默认情况下,插件库将在以下位置搜索: '/usr/local/lib:/usr/lib:~/.zenoh/lib:.'

  • --rest-http-port <rest-http-port>:配置REST 插件的 HTTP 端口。接受的值

    • 端口号
    • 格式为 <local_ip>:<port_number> 的字符串(绑定 HTTP 服务器到特定接口)
    • "None" 以禁用 REST 插件

    如果没有指定,REST插件将在任何接口([::])和端口8000上激活。

[!WARNING] 以下文档适用于 v0.6+ API,Zenoh 的行为和配置有诸多变化。要访问 v0.5 版本的代码和相应的 README,请访问 0.5.0-beta.9 标签版本。


插件

[!WARNING] 由于 Rust 没有稳定的 ABI,插件应使用与 zenohd 完全相同的 Rust 版本构建,并且使用与 zenoh 依赖相同的版本(或提交号)。否则,在 zenohd 和库之间共享类型内存映射的不兼容性可能导致 "SIGSEV" 崩溃。

默认情况下,Zenoh 路由器交付或构建时包含 2 个插件。这些可以通过配置文件进行配置,或者通过使用 CLI 选项 --cfg 或通过 zenoh puts 对配置的各个部分进行单独更改来更改配置。

[!WARNING] 自从 v0.6 以来,zenohd 在启动时不再加载每个可用的插件。相反,只有配置的插件被加载(在处理 --cfg--plugin 选项之后)。一旦 zenohd 运行,插件可以热加载,并且如果它们支持的话,可以通过编辑它们的配置来在运行时重新配置。

请注意,REST 插件是通过 CLI 参数 --rest-http-port 的默认值添加到配置中的。

REST 插件(暴露 REST API):此插件将 GET 和 PUT REST 请求分别转换为 Zenoh gets 和 puts。

存储插件(管理 后端和存储)此插件允许您轻松定义存储。这些将存储它们订阅的键值对,并在查询时发送最新的。有关如何配置它们的信息,请查看 DEFAULT_CONFIG.json5


故障排除

如果出现问题,请首先检查此页面,看是否已经知道问题及其原因。
否则,您可以在zenoh Discord 服务器上提问,或者创建一个问题

依赖项

~19–33MB
~511K SLoC