使用mosquitto_sub命令时如何查看消息的MQTT属性
实现方案
完全可以通过mosquitto_sub的原生参数实现,不需要额外抓包或者第三方工具,具体操作如下:
- 首先确认协议版本:MQTT 3.1/3.1.1协议本身没有定义消息级别的扩展属性,只有MQTT 5.0协议支持传输消息属性、自定义用户属性,需要先确认你的MQTT broker、消息发布端都启用了MQTT 5.0协议支持。
- 执行订阅命令时添加两个核心参数:
-V 5:强制mosquitto_sub使用MQTT 5.0协议和broker建立连接,默认情况下部分版本的客户端会默认使用MQTT 3.1.1协议连接,无法接收属性字段。-F <输出格式>:自定义消息输出模板,把需要的属性字段打印出来。
最简便的全属性查看方式
直接用内置的JSON输出占位符%j,命令示例:
mosquitto_sub -t "你要订阅的主题名" -V 5 -F "%j"
执行后收到的每条消息都会输出为标准JSON结构,除了消息内容、主题、QoS、保留标记等基础信息外,会完整列出所有MQTT 5.0属性,包括消息过期时间、内容类型、响应主题、订阅ID,以及发布端自定义的所有用户属性键值对。
自定义属性输出格式
如果不需要全量信息,只想打印指定字段,可以用对应占位符拼接输出模板,常用占位符如下:
%t:消息所属主题%p:消息正文内容%x:所有用户自定义属性键值对%C:消息的内容类型(content type)属性%E:消息过期时间属性%q:消息的QoS等级
示例命令:
mosquitto_sub -t "sensor/data" -V 5 -F "主题:%t | QoS:%q | 自定义属性:%x | 内容:%p"
注意:如果你的Mosquitto客户端版本低于1.5,不支持MQTT 5.0和
-F参数,需要先升级客户端版本后再使用上述命令。
内容的提问来源于stack exchange,提问作者italktothewind
相关产品推荐
相关产品推荐

