协议网关服务项目(以下简称网关)使用Java语言开发,使用Spring Boot 2和Netty 4搭建开发框架,使用Maven构建项目和管理依赖,使用Lombok简化代码。
建议用户使用Intellij IDEA进行二次开发,将/src/main/resource文件夹标记为Resources Root,项目中以Sample开头的Java类文件为实例代码。
项目启动主类为/src/main/java/com/cmiot/gateway/ProtocolGatewayService.java
网关配置默认使用配置文件方式。默认从Java工程默认资源文件路径(默认位置为/src/main/resource/config)下的gateway.conf中读取网关配置文件。同时,网关项目支持配置自定义,只需实现网关配置信息读取接口(接口默认位置为/src/main/java/com/cmiot/gateway/config),并将其注解为Spring Bean。
网关使用typesafe.config解析配置文件,网关配置文件参数说明如下表
参数 | 是否必须 | 说明 |
---|---|---|
connectionHost | 否 | OneNET平台MQTT接入服务地址,默认为”tcp://183.230.40.96:1883”,需要注意的是此地址需和tlsSupport参数匹配。 |
serviceId | 是 | 协议网关服务ID。 |
instanceName | 是 | 协议网关服务实例名称,serviceId和instanceName二元组共同标识了实例的唯一性,当二元组重复时,仅会在最新启动的实例上建立网关控制连接。 |
instanceKey | 是 | 协议网关服务实例,用于鉴权。 |
transports | 否 | 协议网关服务协议中心,格式为”transport:port, transport:port”,如”tcp:10086”,目前网关仅支持TCP协议,默认开启端口为10086。 |
tlsSupport | 否 | 与OneNET平台MQTT接入服务之间的连接是否使用TLS加密,默认为false,即不使用TLS加密。 |
自定义协议编解码的作用是实现设备数据和协议内部数据之间的相互转换,需用户自主实现。其中,协议内部数据用于与OneNET平台MQTT接入服务之间的通信。
默认位置为/src/main/java/com/cmiot/gateway/custom。
自定义解码器是将自定义协议数据(二进制数组)解码为网关内部数据(ProtocolMessage)。网关根据ProtocolMessage中MessageType的不同进行不同的动作,如:LOGIN-设备登陆、LOGOUT-设备登出,等等,详情请见MessageType小节。
自定义解码器是将网关内部数据(ProtocolMessage)编码为自定义协议数据(二进制数组)。用户可以根据内部数据MessageType的不同对内部数据实现不同的编码,然后推送给设备或者进行下一步处理。
网关根据网关内部数据中MessageType对数据进行不同的处理,MessageType可分为数据上行和下行两类,其中上行数据用于设备到OneNET平台MQTT接入服务的数据上行,如设备主动登陆登出、数据点上传等,下行数据用于MQTT接入服务对上行数据的响应以及数据的主动下发。MessageType详解如下表:
MessageType | 上行/下行 | 说明 |
---|---|---|
LOGIN | 上行 | 代理设备主动登录 |
LOGOUT | 上行 | 代理设备主动登出 |
DP | 上行 | 数据点上传 |
CMD_REPLY | 上行 | 命令回复 |
IMAGE_UPDATE | 上行 | 设备镜像更新 |
IMAGE_GET | 下行 | 设备镜像获取 |
LOGIN_ACCEPTED_RESPONSE | 下行 | 代理设备主动登录成功响应 |
LOGIN_REJECTED_RESPONSE | 下行 | 代理设备主动登录失败响应 |
LOGOUT_ACCEPTED_RESPONSE | 下行 | 代理设备主动登出成功响应 |
LOGOUT_NOTIFY_RESPONSE | 下行 | 代理设备被平台主动登出响应 |
DP_ACCEPTED_RESPONSE | 下行 | 代理设备上传数据点成功响应 |
DP_REJECTED_RESPONSE | 下行 | 代理设备上传数据点失败响应 |
DOWN_LINK_CMD | 下行 | 代理设备收到平台下发命令 |
CMD_REPLY_ACCEPTED_RESPONSE | 下行 | 代理设备回复命令成功的平台响应 |
CMD_REPLY_REJECTED_RESPONSE | 下行 | 代理设备回复命令失败的平台响应 |
IMAGE_UPDATE_ACCEPTED_RESPONSE | 下行 | 代理设备更新镜像成功响应 |
IMAGE_UPDATE_REJECTED_RESPONSE | 下行 | 代理设备更新镜像失败响应 |
IMAGE_GET_ACCEPTED_RESPONSE | 下行 | 代理设备获取镜像成功响应 |
IMAGE_GET_REJECTED_RESPONSE | 下行 | 代理设备获取镜像失败响应 |
IMAGE_DELTA | 下行 | 代理设备收到平台下发的镜像delta消息 |
UNKNOWN | \ | 未知类型型 |