12 个版本 ()

1.0.0-alpha.62024年8月6日
1.0.0-alpha.52024年7月26日
1.0.0-alpha.2 2024年6月21日
0.11.0 2024年6月4日
0.6.0-beta.12022年9月29日

#441 in 网络编程

Download history 136/week @ 2024-04-22 176/week @ 2024-04-29 132/week @ 2024-05-13 8/week @ 2024-05-20 5/week @ 2024-05-27 141/week @ 2024-06-03 4/week @ 2024-06-10 75/week @ 2024-06-17 10/week @ 2024-06-24 9/week @ 2024-07-01 92/week @ 2024-07-08 3/week @ 2024-07-15 68/week @ 2024-07-22 97/week @ 2024-07-29 93/week @ 2024-08-05

每月267次下载

EPL-2.0 OR Apache-2.0

1.5MB
36K 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 插件和存储管理器插件),您可以按照以下步骤操作

手动安装(所有平台)

所有发布包都可以从 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
    • 获取应该接收到存储的发布。
  • 使用 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
  • 通过 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/*'

配置选项

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

有关 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。以下端点是当前支持的

    • 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] 由于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