开发文档 / MQTT Tool

主题、QoS 与消息排查

从连接、订阅和发布三个环节定位问题,理解通配主题、保留消息与 QoS 的作用范围。

MQTT Tool 通用操作;具体协议选项以所用版本为准

继续深入:阅读 MQTT Tool 完整手册 ↗

本页目录

先分清三个状态

「已连接」说明客户端与 broker 建立了连接;「订阅成功」说明订阅请求被接受;看到接收记录才说明对应消息到达了当前客户端。排查时按这个顺序缩小范围。

主题如何匹配

主题区分大小写,由 / 分隔层级。

订阅过滤器 可以匹配 不能匹配
sensor/room/temperature 同名完整主题 sensor/room/humidity
sensor/+/temperature sensor/a/temperature sensor/a/floor/temperature
sensor/# sensor/a/temperature device/a/temperature

+ 匹配一个层级,# 匹配后续多个层级且应位于末尾。通配符用于订阅过滤器,不用于发布主题。初次排查优先使用同一个完整主题,减少变量。

QoS 不是业务处理成功的回执

QoS 0、1、2 定义 MQTT 协议层的交付语义。最终接收侧 QoS 还受发布与订阅双方设置影响。不要把一次发送成功直接理解为设备已完成业务动作。

涉及控制指令时,业务上应定义对应的结果主题、请求标识和超时处理。使用 QoS 1 时,也应考虑重复交付下的业务幂等。

为什么一订阅就收到旧消息

发布时设置 Retain,broker 可以保留该主题最后一条保留消息,在新的匹配订阅建立时发送它。这不是消息历史查询。

初次验证可将 Retain 设为「否」。如果测试 broker 已有保留消息,检查其主题和时间,再确认是不是本轮发送的内容。清理保留消息前,应确认这个主题完全属于自己的测试环境。

常见现象与检查顺序

现象 优先检查
连接失败 broker 是否运行、地址端口、协议、认证、网络可达性
连接反复断开 重复 Client ID、broker 限制、连接日志
有发送记录,没有接收记录 订阅是否成功、主题匹配、发布与订阅权限
JSON 看起来乱码 原文与 HEX 发送方式、设备采用的实际编码
历史数据与当前页面不同 当前连接、筛选条件、接收/发送筛选和查询时间

提供一份可复现的问题描述

记录客户端版本、broker 类型与版本、连接协议、订阅过滤器、实际发布主题,以及一段脱敏载荷。附上期望结果、实际结果和对应时间段的日志。

不要提供真实密码或完整生产消息。可以回到第一条消息的固定示例,判断问题是否与业务载荷有关。