本文介绍消息队列 MQTT 版对 MQTT 协议的兼容性情况,以及不同协议版本的功能差异。
协议兼容说明
消息队列 MQTT 版(TDMQ for MQTT,简称 TDMQ MQTT 版)全面兼容了标准的 MQTT 3.1、MQTT 3.1.1、MQTT 5.0 协议,兼容开源社区 Java、C、C++、Golang、Python、.NET、Rust 等多语言客户端接入。
对于最新的 5.0 协议,除了以下特性暂未兼容外,其余的标准协议内容均已支持:
暂不支持 AUTH Packet:MQTT 5.0 新增的控制报文(Packet Type=0x10),用于实现多轮认证协商。但是对于复杂认证场景,TDMQ MQTT 版额外支持了标准协议外的认证方式(如一机一证等),详见认证概述。
暂不支持指定 Will Delay Interval:CONNECT Packet 中 Will Properties 中的属性之一,用来定义设备异常离线后延迟发送遗嘱消息的时间(秒)。当前暂未支持,如果客户端传入当前值后,服务端无法识别,默认均为 0。
暂不支持 Server Redirection:服务端在 CONNACK Packet 中返回的备用服务器地址。作为商业化产品,TDMQ MQTT 版会对外提供稳定的SLA保障,在服务端故障时,底层资源会自动切换,客户端的接入点不会改变,因此客户端无需感知备用服务器地址的存在。
不同协议版本的能力差异
报文结构内新增了 Reason Code 字段,提供更多的原因码和详细的错误报告。
扩展的会话管理(即 CONNECT 时的 Clean Start 和Session Expiry Interval 等属性 )。
多种 Packet 内新增属性(User Properties)机制,传递自定义元数据,提供更高的扩展性。
共享订阅(Shared Subscriptions):TDMQ MQTT 版在服务端做了功能兼容和增强,除了 5.0 版本的客户端外,同时支持 3.1 和 3.1.1 版本的客户端
主题别名(Topic Aliases)。
流量控制(Receive Maximum)。
增强认证(新增 AUTH Packet)。
服务器断开(Server Disconnect)时可以指示原因和重连地址。
因此,您可以尽快升级客户端 SDK 到 MQTT 5.0 协议版本,享受更多功能。