本文主要描述边缘应用相关的常见问题。

应用容器间如何通信?

边缘应用部署到网关后,每个应用将应用名称作为自身容器的网络别名(相当于域名)。因此通过访问应用名称,即可直接访问应用容器。

例如,部署一个MySQL 8.0数据库Docker镜像到边缘网关,创建应用时输入的应用名称为mysql8,其它边缘应用程序需要访问MySQL数据库服务时,数据库的IP地址填写mysql8即可。

边缘应用如何访问子设备信息?

  • 函数计算应用
    • 订阅设备数据

      通过配置设备到边缘应用的消息路由,自动推送设备数据到函数计算的handler函数中,然后解析函数计算中的event参数,即可获取到设备上报的数据。

    • 调用设备请求方法

      调用函数计算SDK,即可调用到对应设备的请求方法。

  • 容器镜像应用

    通过访问Link IoT Edge的MQTT API,订阅设备数据或调用设备请求方法,详情请参见边缘端MQTT API

云端如何发布消息到边缘应用?

  1. 左侧导航栏选择设备管理 > 产品,单击网关产品后的查看
  2. 参考自定义Topic内容,为网关产品添加如下自定义Topic。
    • Topic类:/YourProductKey/${deviceName}/user/cloudCmd
    • 设备操作权限:发布和订阅。
    定义topic类
  3. 左侧导航栏选择设备管理 > 设备,单击网关设备后的查看
  4. 设备详情页面Topic列表页签下,单击/YourProductKey/${deviceName}/user/cloudCmdTopic后的发布消息
    发布消息
  5. 边缘应用订阅/YourProductKey/${deviceName}/user/cloudCmdTopic。
    • 函数计算应用
      1. 左侧导航栏选择边缘计算 > 边缘实例,单击目标边缘实例后的查看
      2. 参考设置消息路由内容,为边缘实例添加如下消息路由。

        部分参数设置如下所示。

        参数名称 参数说明
        消息来源 选择IoT Hub
        消息主题过滤 选择/YourProductKey/${deviceName}/user/cloudCmd
        消息目标 选择边缘应用和目标应用名称。
      3. 实例详情页面右上角,单击部署。边缘实例部署成功后,函数计算应用中的handler函数,即可接收到云端发布的消息。
    • 容器镜像应用

      通过向本地MQTT Broker订阅/YourProductKey/${deviceName}/user/cloudCmdTopic,接受云端发布的消息,详情请参见设备数据订阅

运行在容器中的边缘应用如何访问本地设备?

可在设置边缘应用的容器配置时,打开特权模式或添加设备映射

容器应用如何持久化存储数据?

可在设置边缘应用的容器配置时,添加卷映射,将宿主机的目录映射到容器内部。此操作可保证在升级应用时,不会丢失应用的历史数据。

运行状态正常的C语言程序日志打印不出来

此问题通常和标准输出的缓存模式有关,建议将如下代码加入到main函数顶部。

if (setvbuf(stdout, NULL, _IOLBF, 0))
   {
       perror("setvbuf failed!");
       exit(EXIT_FAILURE);
   }

边缘函数计算和阿里云函数计算的区别是什么?

  • 代码托管不同:阿里云函数计算的代码运行在阿里云云服务器ECS中;边缘函数计算代码是运行在用户自己的硬件网关中。
  • 访问的目标不同:阿里云函数计算通常用于访问云服务,函数运行环境中预置了常用的阿里云服务SDK;边缘函数计算通常用于访问物联网的网关子设备,预处理和转存子设备数据,函数运行环境中预置了访问子设备信息的SDK。