MQTT协议规范
Posted HaaS技术社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MQTT协议规范相关的知识,希望对你有一定的参考价值。
MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅信息传输协议。可在不可靠的网络环境中进行扩展,适用于设备硬件存储空间或网络带宽有限的场景。使用MQTT协议,消息发送者与接收者不受时间和空间的限制。物联网平台支持设备使用MQTT协议接入。
支持版本
目前物联网平台支持MQTT标准协议接入,兼容5.0、3.1.1和3.1版本协议,具体的协议请参见MQTT 5.0、MQTT 3.1.1和 MQTT 3.1协议文档。
说明 若需使用MQTT 5.0协议,请先购买企业版实例,然后提交工单,为该实例申请开通白名单权限。
与标准MQTT的区别
- 支持MQTT的PUB、SUB、PING、PONG、CONNECT、DISCONNECT和UNSUB等报文。
- 支持clean session。
- 不支持will、retain msg。
- 支持QoS 0、QoS 1,不支持QoS 2。
- 不支持SUB QoS,消息QoS以发送方(PUB)指定为准。
- 基于原生的MQTT Topic上支持RRPC同步模式,服务器可以同步调用设备并获取设备回执结果。
支持的MQTT 5.0特性
MQTT 5.0协议在之前版本基础上添加了大量全新特性,提高了性能和易用性。更多信息,请参见Appendix C. Summary of new features in MQTT v5.0。
目前,物联网平台支持MQTT 5.0的部分新增特性。
- 支持设置客户端和服务端发送报文的最大长度,直接过滤冗长的消息。
MqttConnectionOptions connOpts = new MqttConnectionOptions(); connOpts.setMaximumPacketSize(1024L);
- 支持设置QoS 1消息限流值,单位为条/秒。
MqttConnectionOptions connOpts = new MqttConnectionOptions(); connOpts.setReceiveMaximum(5);
- 支持设置UserProperty属性列表,每个属性由Key和Value组成,用于传输额外的属性数据。
说明 最多可添加20个属性。属性中Key值不允许以下划线(_)开头,Key和Value最大总长度不超过128个字符。
MqttProperties properties = new MqttProperties(); List<UserProperty> userPropertys = new ArrayList<>(); userPropertys.add(new UserProperty("key1","value1")); properties.setUserProperties(userPropertys);
设备使用MQTT 5.0协议成功接入物联网平台后,可在云端运行日志内容中,查看到上报的UserProperty数据。
- 新增了响应主题(ResponseTopic)和相关数据(CorrelationData),类似HTTP请求响应的模式,实现双方通信。
例如,请求方为设备,接收方为您的业务服务器,您可通过AMQP订阅或规则流转后,从消息的属性列表中解析出ResponseTopic和CorrelationData,然后调用Pub接口,将响应发送给设备。
说明MqttProperties properties = new MqttProperties(); properties.setCorrelationData("requestId12345".getBytes()); properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
- 解析出的CorrelationData, 需要通过Base64解码,才能还原成设备上报的byte数组类型数据。
- ResponseTopic和CorrelationData的最大长度都不能超过128个字符。
- 增加了更多返回码,便于设备快速定位请求状态及问题。
更多信息,请参见错误排查。
- 支持将消息通信Topic缩小为整型数值,来减小MQTT报文,节约网络带宽资源。
安全等级
- TCP通道TLS直连模式:安全级别高。说明
- 支持TLS协议1.0、1.1和1.2版本,强烈建议您的设备使用TLS 1.2加密。因TLS 1.0、1.1版本较老,可能有安全风险。
- 设备端Link SDK已配置V1.2版本的TLS协议,您无需自行配置。
- TCP直连模式(数据不加密):安全级别低。
- TCP直连模式,并使用芯片级加密(ID²硬件集成):安全级别高。
Topic规范
Topic定义及分类,请查看什么是Topic。
系统默认通信类Topic可前往控制台设备详情页查看,功能类Topic可前往具体功能文档页查看。
以上是关于MQTT协议规范的主要内容,如果未能解决你的问题,请参考以下文章