首页 > 其他分享 >zenoh rest plugin 简单使用说明

zenoh rest plugin 简单使用说明

时间:2024-12-14 09:00:29浏览次数:7  
标签:plugin zenoh whatami rest zid str new unwrap

zenoh rest plugin 提供了rest api 能力,包含了管理adminspace 以及通过get,put,delete 操作key 的能力

配置

包含了独立模式以及plugin模式,可以解决实际场景使用,基于plugin模式是一个不错的选择

  • 参考配置
{
  "mode": "router",
  "plugins": {
    "mqtt": {
      "port": 1883
    },
    "rest": {
      "http_port": 8000
    }
  },
  "adminspace": {
    "permissions": {
      "read": true,
      "write": true
    }
  }
}

使用

或者以及添加key 可以通过api 比较简单

curl -X PUT -H 'content-type:text/plain' -d 'Hello World!' http://localhost:8000/demo/example/test

curl http://localhost:8000/demo/example/test

adminspace api

实际上此处目前官方文档是有问题的,实际使用应该如下格式 http://localhost:8000/@/**

  • 参考使用

信息如下

curl  -X GET \
  'http://localhost:8000/@/**' \
  --header 'Accept: */*' \
  --header 'Content-Type: application/json'

  • 内部处理

zenoh/src/net/runtime/adminspace.rs 提供了基于runtime 暴露的key 信息

    pub async fn start(runtime: &Runtime, version: String) {
        let zid_str = runtime.state.zid.to_string();
        let whatami_str = runtime.state.whatami.to_str();
        let config = &mut runtime.config().lock().0;
        let root_key: OwnedKeyExpr = format!("@/{zid_str}/{whatami_str}").try_into().unwrap();

        let mut handlers: HashMap<_, Handler> = HashMap::new();
        handlers.insert(root_key.clone(), Arc::new(local_data));
        handlers.insert(
            format!("@/{zid_str}/{whatami_str}/metrics")
                .try_into()
                .unwrap(),
            Arc::new(metrics),
        );
        if runtime.state.whatami == WhatAmI::Router {
            handlers.insert(
                format!("@/{zid_str}/{whatami_str}/linkstate/routers")
                    .try_into()
                    .unwrap(),
                Arc::new(routers_linkstate_data),
            );
        }
        if runtime.state.whatami != WhatAmI::Client
            && unwrap_or_default!(config.routing().peer().mode()) == *"linkstate"
        {
            handlers.insert(
                format!("@/{zid_str}/{whatami_str}/linkstate/peers")
                    .try_into()
                    .unwrap(),
                Arc::new(peers_linkstate_data),
            );
        }
        handlers.insert(
            format!("@/{zid_str}/{whatami_str}/subscriber/**")
                .try_into()
                .unwrap(),
            Arc::new(subscribers_data),
        );
        handlers.insert(
            format!("@/{zid_str}/{whatami_str}/queryable/**")
                .try_into()
                .unwrap(),
            Arc::new(queryables_data),
        );

        #[cfg(feature = "plugins")]
        handlers.insert(
            format!("@/{zid_str}/{whatami_str}/plugins/**")
                .try_into()
                .unwrap(),
            Arc::new(plugins_data),
        );

        #[cfg(feature = "plugins")]
        handlers.insert(
            format!("@/{zid_str}/{whatami_str}/status/plugins/**")
                .try_into()
                .unwrap(),
            Arc::new(plugins_status),
        );

说明

目前zenoh 官方文档有部分并不是很一致,最好的学习是结合源码使用

参考资料

zenoh/src/net/runtime/adminspace.rs

https://zenoh.io/docs/manual/configuration/#adminspace-configuration

https://zenoh.io/docs/manual/plugin-http/

https://download.eclipse.org/zenoh/

https://zenoh.io/docs/getting-started/first-app/

标签:plugin,zenoh,whatami,rest,zid,str,new,unwrap
From: https://www.cnblogs.com/rongfengliang/p/18519951

相关文章

  • ChatGPT plugins
    AI已是提升科研效率的一把好手。PuPu也在努力学习如何用AI提高学习和科研效率,把自己觉得有用的AI工具分享给大家,祝大家学有所成,早日毕业![加油R]首先,给大家安利 3个ChatGPT插件,分别用于文献检索,知识学习和写作润色。Scholar AI:文献检索与分析研究查询:回答学术与专利相关问题,提供......
  • 自定义资源支持:K8s Device Plugin 从原理到实现
    本文主要分析k8s中的device-plugin机制工作原理,并通过实现一个简单的device-plugin来加深理解。1.背景默认情况下,k8s中的Pod只能申请CPU和Memory这两种资源,就像下面这样:resources:requests:memory:"1024Mi"cpu:"100m"limits:memory:"2......
  • zenoh 1.0.0 一些新变化
    zenoh1.0.0发布了,可以说是一个比较稳定的版本了,同时有一些新的变化,比如api上的以及内部处理上Interestprotocol以前版本订阅以及查询会在系统所有节点进行定义的传播,新的不会在传播到客户端以及peer子系统,所有的操作都是发送到最新的routerStorageAlignmentProtocol基于......
  • Citus的restart详解
    Citus的restart详解1.命令行restart在ctl.py的restart方法中,获取到集群的信息,然后再获取到要重启节点的信息。cluster=get_dcs(cluster_name,group).get_cluster()members=get_members(cluster,cluster_name,member_names,role,force,'restart',False,g......
  • Obisidian plugins
    外观美化:canvas-css-classcolored-textobsidian-icon-folderobsidian-icons-pluginprivacy-glasses文字编辑:advanced-tables-obsidiancm-editor-syntax-highlight-obsidianobsidian-code-copyobsidian-excel-to-markdown-tabletable-editor-ob......
  • rest-assured实现java接口自动化测试
    1.导包导入importio.restassured.response.Response;2.使用2.1请求四要素:请求方式,请求路径,请求参数,请求头given()在什么场景下(请求头,请求参数,cookies等等)when()执行什么操作(get,post)then()判断结果(显示日志,返回接口的结果)2.2获取响应结果then().......
  • 使用Arthas和arhtas idea plugin插件做代码性能分析
    最新版本,点击下载https://arthas.aliyun.com/download/latest_version?mirror=aliyun一、idea插件安装idea中安装arthasidea插件在arthas下载目录运行java-jar.\arthas-boot.jar         (1)出现下面情况,是没有启动的java服务;       (2......
  • 解决Gradle报错:only buildscript {} and other plugins {} script blocks are allowed
    解决Gradle报错:onlybuildscript{}andotherplugins{}scriptblocksareallowedbeforeplugins{}blocksTag:Gradle,plugins,buildscript,Gradle报错,ExtractVariable,build.gradle问题描述在使用Gradle配置项目时,我遇到了一个让人困惑的错误提示:“onlyb......
  • EDI系统与业务系统集成:选择中间数据库还是REST API方案?
    EDI项目中,对外企业可以借助专业的EDI系统,基于AS2、OFTP等国际通用的EDI传输协议搭建传输通道,并基于这些传输通道实现安全、可靠地数据传输。对内企业如何实现业务系统和EDI系统之间的数据同步呢?企业可以通过中间数据库、RESTAPI、WebService、共享文件夹等方式实现EDI系统与企业......
  • 移动端使用cordova-plugin-wechat实现微信授权登录,可以拉起微信,点击允许之后没有进入
    开发移动端使用微信授权登录时,遇到了这个问题,被困了两天终于在第三天好了。我使用的写法是cordova-plugin-wechat-npm里提供的写法: 一模一样复制下来的。一开始看到别的地方多传了一个appID的参数,我加传之后会报错,还是改回按照文档的这个写法。一开始以为是没授权,实际上看......