17个版本
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.5.0-beta.5 | 2020年11月2日 |
#17 in 网络编程
每月下载 17,645次
在 38 个crate中使用 (37 个直接使用)
3MB
73K SLoC
Eclipse Zenoh
Eclipse Zenoh:零开销发布/订阅、存储/查询和计算。
Zenoh(发音为/zeno/)统一了运动中的数据、静止数据和计算。它巧妙地将传统的发布/订阅与地理分布的存储、查询和计算相结合,同时保持了超越任何主流堆栈的时间和空间效率。
请访问网站 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
如何构建
[!警告] 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
- 可查询的应该在其监听器中显示日志,get 应该接收到可查询的结果。
- 运行:
路由测试
[!注意] 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 -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 管理路由器空间
- 以允许通过管理空间执行配置更改的方式运行 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显示了该文件的架构和可用选项。
请参阅examples/中Zenoh使用的其他示例。
[!NOTE] 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服务器上提问,或创建一个问题。
依赖项
~24–59MB
~1M SLoC