主题别名

更新时间:

本文为您介绍MQTT 5.0的新特性主题别名。

功能介绍

主题别名(Topic Alias)是MQTT 5.0协议中的一个新特性,允许客户端和服务器在互相通信时使用简短的整数值来代替完整的主题路径,从而减少传输的负载,提升传输效率和降低带宽消耗。

使用限制

  • 单个连接中,服务端最多支持30个Topic别名。客户端发送给服务端的消息中,topic别名个数超过30个则关闭连接,并报Topic名字错误。

  • 单个连接中,客户端向服务端声明自己支持的Topic别名个数最多设置为30个,超过30个,服务端推送消息时将不会设置Topic别名。

  • 主题别名不能重复,Topic和别名在一个连接中一一对应。

  • 主题别名映射只对当前连接有效,重新连接不保证相同Topic的别名一样。

使用说明

  • Topic Alias 值不能是0。

  • 客户端发送的PUBLISH的Topic Alias不能大于服务端CONNACK回复的Topic Alias Maximum。客户端必须接受所有大于0小于等于Topic Alias Maximum的Topic Alias(其在CONNECT报文中设置的)

  • Topic Alias 映射对于客户端和服务端不是相等的。例如客户端PUBLISH和服务端PUBLISH中的Topic别名都是1,但是它们可能指向不同的Topic。

使用场景

  • 带宽受限的环境:如果设备连接的网络带宽非常有限,使用主题别名可以减少发送每条消息所需的数据量,降低带宽消耗。

  • 高频率消息发布:当客户端需要频繁地发布消息到相同的几个主题时,使用主题别名可以极大地减少冗余信息的发送。例如股市行情跟踪或 IoT 数据收集系统,这些系统可能每秒都会发送大量的消息。

  • 节能:对于以电池供电的设备,减少必须通过无线网络发送的数据量可以延长设备的续航时间。例如远程监控站点或移动设备。

  • 资源受限的设备:一些嵌入式设备和IoT设备的硬件资源有限,较短的主题别名可以使这些设备处理消息的速度更快并且占用更少的内存。

MQTT 5.0的主题别名的功能,使得高频率消息传输、复杂长主题场景以及带宽有限的网络环境等情况得到很好的改善,使得物联网和实时通信应用变得更加高效和灵活。

消息示例

例如,主题名称为 home/groundfloor/livingroom/temperature 并被赋予了主题别名“1”,那么在后续的消息中只需要引用这个数字“1”即可。

第一个PUBLISH报文如下:

Topic Name: home/groundfloor/livingroom/temperature
Topic Alias: 1
Payload: 22°C

任何后续的PUBLISH报文都可以这样发送:

Topic Alias: 1
Payload: 23°C

在这个例子中,使用主题别名后,后续的PUBLISH报文就不再需要发送冗长的主题名称了。