12 个版本 ()
1.0.0-alpha.6 | 2024年8月6日 |
---|---|
1.0.0-alpha.5 | 2024年7月26日 |
1.0.0-alpha.2 |
|
0.11.0 | 2024年6月4日 |
0.6.0-beta.1 | 2022年9月29日 |
#441 in 网络编程
每月267次下载
1.5MB
36K SLoC

Eclipse Zenoh
Eclipse Zenoh:零开销 Pub/sub, 存储/查询和计算。
Zenoh(发音为 /zeno/)统一了运动中的数据、静止数据和计算。它巧妙地结合了传统的 pub/sub 和地理分布式存储、查询和计算,同时保持了超越任何主流堆栈的时间和空间效率。
请访问网站 zenoh.io 和 路线图 以获取更详细的信息。
入门
Zenoh 极其容易学习,掌握基础知识最好的地方是我们的 入门指南。
如何安装它
要安装 Zenoh 路由器(zenohd
)的最新版本及其默认插件(REST API 插件和存储管理器插件),您可以按照以下步骤操作
手动安装(所有平台)
所有发布包都可以从 https://download.eclipse.org/zenoh/zenoh/latest/ 下载。
每个子目录的名称都是 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.75.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
- 可查询的应该在其监听器中显示日志,而获取应该接收可查询的结果。
- 运行:
路由测试
[!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
- 获取应该接收到存储的发布。
- 以内存存储运行 Zenoh 路由器:
-
使用
curl
工具的 REST API- 以内存存储运行 Zenoh 路由器:
./target/release/zenohd --cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'
- 在另一个 shell 中,通过 REST API 进行发布:
curl -X PUT -d '"Hello World!"' https://127.0.0.1:8000/demo/example/test
- 通过 REST API 获取它:
curl https://127.0.0.1:8000/demo/example/test
- 以内存存储运行 Zenoh 路由器:
-
通过 REST API 管理 router 空间
- 以管理员空间权限运行 Zenoh 路由,并使用内存存储:
./target/release/zenohd --adminspace-permissions=rw --cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'
- 在另一个 shell 中,通过 Zenoh 管理空间获取 Zenoh 路由信息:
curl https://127.0.0.1:8000/@/local/router
- 获取路由的卷(默认只有内存):
curl 'http://localhost:8000/@/local/router/**/volumes/*'
- 获取本地路由的存储(启动时在 '/demo/example/**' 上配置的内存存储应该存在):
curl 'http://localhost:8000/@/local/router/**/storages/*'
- 在
/demo/mystore/**
上添加另一个内存存储:curl -X PUT -H 'content-type:application/json' -d '{"key_expr":"demo/mystore/**","volume":"memory"}' https://127.0.0.1:8000/@/local/router/config/plugins/storage_manager/storages/mystore
- 检查是否已创建:
curl 'http://localhost:8000/@/local/router/**/storages/*'
- 以管理员空间权限运行 Zenoh 路由,并使用内存存储:
配置选项
可以通过 CLI 为所有 Zenoh 示例和 Zenoh 路由提供 Zenoh 配置文件。
-c, --config <FILE>
:一个 JSON5 配置文件。 DEFAULT_CONFIG.json5 展示了此文件的架构和可用选项。
有关 Zenoh 使用示例,请参阅 examples/
[!注意] Zenoh 运行时配置:从 0.11.0-rc 版本开始,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] 由于Rust没有稳定的ABI,插件应该与
zenohd
相同的Rust版本构建,并使用与'zenohd'相同的版本(或提交号)的zenoh
依赖项。否则,在zenohd
和库之间共享类型内存映射的不兼容性可能导致"SIGSEV"
崩溃。
默认情况下,Zenoh路由器交付或构建时包含2个插件。这些可以通过配置文件进行配置,或者通过使用--cfg
CLI选项或通过zenoh puts对配置的各个部分进行单独更改来配置。
[!WARNING] 自从
v0.6
以来,zenohd
不再在启动时加载所有可用的插件。相反,仅加载配置的插件(在处理--cfg
和--plugin
选项之后)。一旦zenohd
启动,可以通过编辑它们的配置并通过adminspace进行热加载和(如果支持)在运行时重新配置插件。
请注意,REST插件是通过默认的--rest-http-port
CLI参数添加到配置中的。
REST插件 (公开REST API): 此插件将GET和PUT REST请求分别转换为Zenoh的GET和PUT。
存储插件 (管理后端和存储) 此插件允许您轻松定义存储。这些将存储它们订阅的键值对,并在查询时发送最新的值。有关如何配置它们的详细信息,请参阅DEFAULT_CONFIG.json5。
故障排除
如果遇到问题,请首先查看此页面以确定问题及其原因是否已知。否则,您可以在zenoh Discord服务器上提问,或创建一个问题。
依赖项
~26–61MB
~1M SLoC