文档

用户属性

更新时间:
一键部署

本文为您介绍MQTT 5.0的新特性用户属性。

功能介绍

用户属性(User Properties)是MQTT 5.0协议定义的一种允许用户在消息中添加自定义元数据的机制。这些属性以UTF-8的键值对形式存在,‌不会影响消息本身的内容,类似于HTTP的Header。允许用户根据具体应用场景定制消息的元数据,不仅增加了消息传输的灵活性和适用性,还使得MQTT能够更加高效地处理复杂的业务逻辑和需求。

使用限制

  • 用户属性序列化后大小不能超过8K字节。

    序列化后的用户属性如下:

    [{"key":"mQ","value":"test001"},{"key":"MQ","value":"test002"}]

    该字符串的长度不能超过8K字节。

  • 仅存储与转发PUBLISH报文中的用户属性,即只对发送消息的用户属性进行存储与转发。

使用说明

  • 用户属性是一个键值对列表,键可以重复,MQTT服务不会进行去重操作。

  • 每个用户属性都是一个键值对,键和值都必须为UTF-8编码的字符串。

应用场景

  • 设备状态报告:通过用户属性,设备可以在发送状态数据时附带一些标识信息,例如设备类型、位置等,从而使得数据接收方在处理数据时可以根据这些属性采取设定动作。

  • 消息路由:在分布式系统中,可以根据用户属性的不同值来决定消息的路由,增强系统对消息的灵活处理能力。

  • 安全和审计:在敏感数据传输中,用户属性可以携带审计信息,例如会话ID、用户标识等,有助于后续的安全审计和追踪。

MQTT 5.0的用户属性功能,使得接收方能够获取关于消息更丰富的上下文信息,让数据处理变得更加高效,操作更加有针对性,从而满足多样化的应用场景需求。

消息示例

例如,现在需要发送一个温度读数的消息,同时附带设备所在位置和读数取得的时间戳。在这种情况下,您可以创建以下用户属性:

键:location 值:warehouse-section-a

键:timestamp 值:2021-09-15T12:00:00Z

当您的MQTT客户端构建这条消息时,除了标准的主题(Topic)和有效载荷(Payload),您还能够添加上述的用户属性。发送到MQTT代理(Broker)的PUBLISH报文内容如下:

Topic: sensors/temperature
Payload: 22.4 // 这是实际的温度读数
User Properties: 
  "location : warehouse-section-a"
  "timestamp: 2021-09-15T12:00:00Z"

接收此消息的客户端就能获取关于消息更丰富的上下文信息,不仅知道温度读数,还能了解读数的具体位置和时间,使得数据的处理更为高效和有针对性。