zenoh rest plugin 简单使用说明

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/

posted on 2024-12-14 08:00  荣锋亮  阅读(0)  评论(0编辑  收藏  举报

导航