2020-08-20

模块介绍

cloud-data-channel

功能:

  1. 数据存储:将结构化数据存入MySQL,将图片数据存入FastDFS。
  2. 数据查询:经鉴权后对外提供数据查询服务(HTTPS),根据NodeId查询其终端设备上传的数据。数据经查询后设置过期时间,到期销毁。
  3. 证书颁发:给边缘edge-data-channel模块颁发证书,以便鉴权。
  4. 数据接收:对于可信任edge,鉴权后与其保持websocket长连接,配置连接池接收数据。

接口:

一、查询结构化数据接口

  1. 接口描述
  • 名称:/getUserDeviceData
  • 功能:根据请求头中的content-type类型判断请求数据类型,获取数据
  • 请求方法: post
  • 请求头:content-type :multipart/form-data、application/json
  1. 输入参数
    | 参数名称 | 必选 | 值类型 | 描述 |
    | -------------- | ---- | ------- | ----------------------------------------- |
    | RequestId | 是 | String | 请求ID,UUID格式 |
    | UserId | 是 | String | 用户ID |
    | Token | 是 | String | 权限 |
    | DeviceDataId | 否 | String | 数据ID |
    | DeviceId | 否 | String | 设备ID |
    | NumsOfData | 否 | int | 数据条数 |
    其中,DeviceDataId和DeviceId必须二选一,若NumsOfData为空,默认取1。
    对于图片数据,每次发送1条。
  2. 输出参数
    成功返回:将查询到的数据结果传输到客户端。将RequestId,文件信息存入响应头。请求的数据直接通过conn传输。
    失败返回:
    | 参数名称 | 类型 | 描述 |
    | ------------------ | ------ | -------- |
    | Response | Map | 返回结果 |
    | Response.RequestId | String | 请求ID |
    | Response.Error | String | 错误信息 |
    | Response.Error.Code | String | 错误码 |
    | Response.Error.Message | String | 错误描述 |
输入:
{
    "RequestId": "5ebf13a2-f925-4ba7-adff-ddbc21d355e3",
    "UserId": "1",
    "Token": 1,
    "DeviceDataId": “1”,
    "NumsOfData":"1",
}

二、获得edge上传的数据

  • 名称:/getDataFromEdge
  • 功能:wws+tls双向认证后,接收从edge上传的数据,根据协议头判断数据类型。解析协议后将数据存入mysql/go-fastdfs。

edge-data-channel

功能:

  1. 数据上传:与iot-cloud-data-channel模块建立webSocket连接,配置连接池。持续将数据(包括图片数据及结构化数据)push到云端。设计协议实现数据传输。根据消息头区分图片数据/结构化数据。其中,图片数据大小在500k左右。后续可动态调整。
  2. 证书颁发:给device设备颁发证书,以便鉴权。
  3. 数据接收:鉴权后提供接口使device端设备上传数据至edge,并通过自定http.header字段判断其数据类型,且根据其实际数据进行验证。接收数据后查看webSocket连接情况,如通信正常直接启动数据上传服务,如通信异常启动数据暂存服务,并持续发送心跳包,待通信正常时,将暂存数据都发往云端,并清空暂存数据。
  4. 数据暂存:设备上传至边缘后,能将数据暂存一段时间,并设置暂存数据的容量。如果超过容量仍有数据进入,则淘汰旧数据。

接口:

一、device上传数据至edge接口

  1. 接口描述
  • 名称:/uploadDevieceData
  • 功能:根据请求头中的content-type类型判断请求数据类型。
  • 请求方法: post
  • 请求头:content-type :multipart/form-data、application/json
  • 自定义请求头:
    | 参数名称 | 必选 | 值类型 | 描述 |
    | -------------- | ---- | ------- | ----------------------------------------- |
    | RequestId | 是 | String | 请求ID,UUID格式 |
    | DeviceId | 是 |String | 设备ID |
    | DeviceDataId | 是 |String | 数据ID |
  1. 输入参数
    | 参数名称 | 必选 | 值类型 | 描述 |
    | -------------- | ---- | ------- | ----------------------------------------- |
    | Data | 是 | String | 所上传的数据 |

  2. 输出参数
    成功返回:
    | 参数名称 | 类型 | 描述 |
    | ------------------ | ------ | -------- |
    | Response | Map | 返回结果 |
    | Response.RequestId | String | 请求ID |
    | Response.DeviceDataId | String | 数据ID |
    失败返回:
    | 参数名称 | 类型 | 描述 |
    | ------------------ | ------ | -------- |
    | Response | Map | 返回结果 |
    | Response.RequestId | String | 请求ID |
    | Response.Error | String | 错误信息 |
    | Response.Error.Code | String | 错误码 |
    | Response.Error.Message | String | 错误描述 |

输入:

{
    "Data":"{"aaa":"1111"},...",
}
输出:
{
    "Response": {
        "RequestId": "5ebf13a2-f925-4ba7-adff-ddbc21d355e3",
        "DeviceDataId":"1"
    }
}

二、edge数据上传至cloud接口

  1. 接口描述
  • 名称:uploadDataToCloud -> 分成uploadImageDataToCloud以及uploadStructDataToCloud两个接口,该接口不被外部调用。程序内部自动开启协程调用上传。
  • 功能:通过wss连接池将数据上传至云端

涉及的外部服务

fastdfs:采用go-fastdfs存储图片数据。相比fastdfs提供了go的api接口,方便开发。
mysql:采用go原生库database/sql,对结构化数据进行存储。

数据库表设计:

structuraData表:结构化数据直接存于mysql
| id | userId | deviceId | deviceDataId |structuraData|
| :--- | :---: | ---: |

imagePath表:图片上传至go-fastdfs后,存储路径
| id | userId | deviceId | deviceDataId |path|
| :--- | :---: | ---: |

go-fastdfs:
以deviceId-deviceDataId作为文件命名方式,直接从存储路径中查找文件。

wss协议设计:

消息头-消息长度-消息内容
其中,消息头包括消息类型:structuraData/imageData
消息内容封装了requestId,data,deviceDataId,deviceId字段,转成json格式传输

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。