6 个版本
0.5.0-beta.7 | 2021年2月4日 |
---|---|
0.5.0-beta.5 | 2020年11月2日 |
0.5.0-beta.4 | 2020年10月30日 |
0.5.0-beta.2 | 2020年9月22日 |
#8 在 #边缘计算
21 每月下载量
465KB
10K SLoC

Eclipse Zenoh
Eclipse Zenoh:零开销 Pub/sub,存储/查询和计算。
Zenoh(发音为 /zeno/)统一了数据在运动、数据在静止和计算。它将传统的 pub/sub 与地理分布的存储、查询和计算巧妙地结合在一起,同时保持了超出任何主流堆栈的时间和空间效率。
入门
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应该接收到存储的发布内容。
- 使用内存存储运行Zenoh路由器
-
使用
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
- 使用内存存储运行Zenoh路由器
-
通过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/*'
- 运行Zenoh路由器,并具有通过管理空间执行配置更改的权限,以及具有内存存储
配置选项
可以通过CLI为所有Zenoh示例和Zenoh路由器提供Zenoh配置文件。
-c, --config <FILE>
: 一个 JSON5 配置文件。 DEFAULT_CONFIG.json5 展示了该文件的架构和可用的选项。
请参考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
。以下端点是当前支持的 -
-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>
的库文件中加载。
重复此选项以加载多个插件。
- 插件名称;zenohd 将在 Unix 上搜索名为
-
--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