协议 / 二进制序列化

MQTT 主题匹配测试逐行看懂匹配原因

输入一个订阅过滤器和每行一个发布主题,再选择协议版本与消息场景。

MQTT 主题匹配测试

订阅主题过滤器

发布主题列表

逐行匹配结果

过滤器和主题仅在此浏览器处理,不连接 Broker,也不发送网络请求。

协议与投递选项

过滤器中 + 独占一层,# 只能独占末层;发布主题不能含通配符。

一个过滤器、最多 1,000 行主题。只跳过空行,空格和空层级都保留。

输入过滤器和主题后开始。

设备发布成功而订阅端收不到消息时,MQTT 主题匹配测试能把大小写、斜杠、空层级和 $ 系统主题造成的差异逐项拆开。不要先改 Broker 配置,先确认 Topic 名称与订阅过滤器本身是否相符。

把真实主题列表粘进来,先看规则命中,再看已有保留消息是否会投递给新订阅。MQTT 5.0 的共享订阅可能命中过滤器,却不会收到加入前保存的保留消息。

为什么用 MQTT 主题匹配测试?

过滤规则命中与消息投递是两层判断。

看清通配符覆盖哪一层

MQTT 主题匹配测试会指出 + 只替代一个完整层级,末尾 # 还能覆盖父层级。空层级和 $ 系统主题也按原样判断,不会偷偷去空格或改写大小写。

分层主题分成多条路径,一条只覆盖单层,另一条覆盖父层级和子层级

分开看共享订阅与保留投递

同一条已有保留消息可与普通订阅和 MQTT 5.0 共享订阅的过滤器同时匹配,但新加入的共享成员不会收到旧保留消息。结果逐行把这两件事分开显示。

普通订阅和共享订阅都匹配存储的主题,只有普通订阅收到旧保留消息

订阅前先核对这三处

01

保留主题原样

逐行粘贴实际发布的 Topic;大小写、首尾斜杠、空格与两个斜杠之间的空层级都有效。只跳过长度为零的分隔行。

  • 通配符示例会展示 sensors//temperature 为什么能被 + 匹配。
02

选对版本和时刻

MQTT 5.0 会解析 $share/组名/过滤器;MQTT 3.1.1 不把它当标准共享订阅。保留场景只检查新订阅初次收到已有消息。

  • 共享订阅示例会同时切到 MQTT 5.0 与保留场景。
03

读第一处不符

未命中行会指出第几个层级不同;共享保留行会区分规则命中与不投递。输入或选项变更后,旧结果不能复制或下载。

  • 关闭自动测试后可用 Ctrl/Cmd+Enter 执行。

逐项解释过滤器怎样工作

按层级执行通配符

MQTT 主题通配符 + 只占完整一层,# 只能在末层,并可覆盖父主题;普通 glob 的 * 或 ? 不会被当成 MQTT 操作符。

批量主题过滤器报告

一个 MQTT 主题过滤器可检查最多 1,000 行 Topic。结果保留原始行号,非法发布主题与普通未命中分开统计。

按协议版本解释共享订阅

MQTT 5.0 会剥离 $share/组名/ 再匹配;3.1.1 只按字面层级比较,不会假装知道 Broker 的私有扩展。

本地预测的边界

发布主题不是通配模式
过滤器中的 + 和 # 必须独占层级,# 还必须在末尾。发布 Topic 含这两个字符会标为非法;首层通配符也不会命中 $SYS。
共享订阅取决于版本
标准 MQTT 共享订阅属于 5.0。3.1.1 模式对 $share 只做字面匹配,不模拟 EMQX 等 Broker 的扩展。
保留场景只看初次投递
这里把每行 Topic 视为已保存一条保留消息,普通 MQTT 5.0 订阅按 Retain Handling 0 处理;QoS、会话恢复、删除和之后的发布均不模拟。
不代替 Broker 验证
MQTT 主题匹配测试不连接 Broker,也不检查 ACL、凭据或真实消息投递。规则命中只能说明本地协议比较结果。

MQTT 主题匹配测试常见问题

MQTT 中的 + 和 # 能用于发布主题吗?

不能。它们只可用于订阅过滤器;发布 Topic 中出现任意一个都会被本工具标为非法。+ 只能独占一个层级,# 还必须是最后的完整层级。

为什么订阅 # 收不到 $SYS 主题?

协议规定首字符为通配符的过滤器不匹配以 $ 开头的 Topic。若要检查系统主题,请另外使用 $SYS/# 这样的显式过滤器。

同一个主题能被共享订阅与普通订阅同时使用吗?

可以分别匹配,但共享组内实时消息由 Broker 选一位成员接收;加入共享组时不会补发已有保留消息。这里仅预测过滤和初次投递,不预测成员分配。

重叠订阅了普通主题和通配符主题时如何接收消息?

本工具一次只测试一个过滤器,无法根据多个订阅、QoS 与会话状态判断最终收到几份。请在实际 Broker 上验证重叠订阅的投递行为。

主题的层级及长度有什么限制吗?

MQTT 没有独立的层级数上限,但单个 Topic 或过滤器的 UTF-8 编码最多 65,535 字节。此页另外限制最多 1,000 个主题行,超出会明确报错。

还有没解开的匹配问题?

现在使用 MQTT 主题匹配测试

把实际过滤器和主题列表带回 MQTT 主题匹配测试;只有要检查新订阅是否收到旧保留消息时,再切换保留场景。

匹配过程只在浏览器内运行。