17个版本

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.5.0-beta.52020年11月2日

#17 in 网络编程

Download history 4881/week @ 2024-05-02 8352/week @ 2024-05-09 4135/week @ 2024-05-16 5181/week @ 2024-05-23 3427/week @ 2024-05-30 4645/week @ 2024-06-06 3566/week @ 2024-06-13 4722/week @ 2024-06-20 4136/week @ 2024-06-27 2835/week @ 2024-07-04 3809/week @ 2024-07-11 4066/week @ 2024-07-18 4776/week @ 2024-07-25 4525/week @ 2024-08-01 4364/week @ 2024-08-08 3436/week @ 2024-08-15

每月下载 17,645次
38 个crate中使用 (37 个直接使用)

EPL-2.0 OR Apache-2.0

3MB
73K SLoC

CI Documentation Status Discussion Discord License License

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 应该接收到存储的发布内容。
  • 使用 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 管理路由器空间

    • 以允许通过管理空间执行配置更改的方式运行 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配置文件。

请参阅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。当前支持的端点如下

    • 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服务器上提问,或创建一个问题

依赖项

~24–59MB
~1M SLoC