Topic、通配符、QoS 与 Retain
用具体例子理解主题匹配和消息传递语义。
浏览全部手册
本页目录
Topic 区分大小写
device/A/status 与 device/a/status 是两个主题。斜杠分隔层级,前后多一个斜杠也会改变主题。设备和服务端必须约定一致。
发布使用具体主题,订阅可以使用过滤器。发布主题不要包含 + 或 #。
通配符例子
| 订阅过滤器 | 能匹配 | 不能匹配 |
|---|---|---|
| device/+/status | device/a/status | device/a/sensor/status |
| device/# | device/a/status、device/a | other/a/status |
| device/a/status | 完全相同的主题 | device/b/status |
+ 代表一个完整层级;# 用于末尾并代表多个层级。系统主题通常以 $ 开头,不能假定 # 会覆盖它们;需要时明确订阅 broker 允许的 $SYS/#。
QoS 不是业务处理结果
- QoS 0:最多一次,不提供 MQTT 层重传保证。
- QoS 1:至少一次,业务处理需考虑重复。
- QoS 2:协议层一次交付流程,不等于下游业务操作天然幂等。
发布和订阅分别配置 QoS。接收侧实际等级受两侧和 broker 限制,不一定与发送时选择完全一致。
Retain 的使用顺序
Retain 为「否」的普通消息,通常不会在后来新增订阅时重放。若要快速入门,先订阅成功,再发布。
Retain 为「是」时,broker 可以保留该主题的最近一条保留消息,新订阅者可能立即收到它。请用独立测试主题验证,避免覆盖业务主题状态。
清除保留消息属于 broker 侧语义,通常是向同一具体主题发布空载荷且 Retain 为真;操作前确认目标主题,不要在不确定的业务主题上试验。
与本地历史的区别
broker 的保留消息与客户端 SQLite 历史不是同一份数据。删除本地历史不会删除 broker 的保留消息;取消订阅也不会自动清除 broker 数据。
仍有疑问?按反馈清单整理复现信息 →