MQTT 订阅 # 为什么收不到 $SYS,怎样离线核对
以首层通配符开头的过滤器不匹配以$开头的主题,单独#因此不覆盖$SYS。需要时用明确的$SYS/#过滤器,并另行检查Broker是否提供和授权该主题。
本文由器赋开物编辑整理,AI 辅助撰写。下面输入是合成对照,用于复算公式或协议规则,没有连接真实设备完成现场验证。
本次具体要判断什么?
工具对本例显示不匹配;改成$SYS/#后规则匹配。这个结果与Broker配置无关,且不会连接任何服务读取真实系统信息。
先保存可复算的对照输入
打开MQTT 3.1.1 主题过滤器匹配工具,把默认值改为下表场景。文字或字节过长时这里只展示摘要,完整原始输入在附件中。
| 输入项目 | 对照值 | 单位或格式 |
|---|---|---|
| 订阅过滤器 | # | 见字段定义 |
| 实际发布主题 | $SYS/broker/uptime | 见字段定义 |
模型或规则得到什么结果?
+匹配一个层级,#匹配最后的零个或多个层级;$主题遵守首层通配限制
| 结果项目 | 对照输出 | 单位 |
|---|---|---|
| 匹配结果 | 不匹配 | 按模型解释 |
| 主题UTF-8长度 | 18 | byte |
| 过滤器UTF-8长度 | 1 | byte |
本工具按MQTT 3.1.1主题匹配,不解析MQTT 5共享订阅前缀,也不连接Broker。
下载本例完整输入、输出与核验记录 JSON。64 位整数按字符串保留,未四舍五入的计算值保存在附件;设备、仪器和实际结论栏目留空,不把预测当测量。
怎样核对和排查?
先确认实际发布主题是否真的以$开头,过滤器是否使用首层通配。对两个过滤器做明确对照,再查Broker文档、ACL和订阅结果。若应用使用MQTT5共享订阅前缀,不把它直接当作本3.1.1过滤器输入。
哪些做法容易误判?
把所有$主题都说成禁止订阅不正确,限制的是特定通配匹配方式。反过来,离线规则允许也不说明系统主题存在,消息频率和字段属于Broker实现。
什么条件才足以接受结论?
记录过滤器、主题、协议版本和Broker订阅结果,规则匹配与服务提供能力分列。没有服务端证据时,只报告工具的离线匹配结论。
适用范围与相关资料
继续查阅相关原理或其他工具。使用不同工具时先核对输入单位、模型和协议版本,避免把一个场景的结论直接套到另一个场景。
不连接Broker、不验证ACL或订阅是否成功,不解析MQTT5共享订阅前缀;UTF-8长度与字数分开。
依据:OASIS MQTT 3.1.1正式规范。实现检查覆盖了独立算例和拒绝路径;工具自身通过测试不能替代你对硬件、SDK版本和业务规则的核验。
继续处理相邻任务
本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。
- OASIS MQTT 3.1.1正式规范 ↗
docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html