连接与订阅

Topic、通配符、QoS 与 Retain

用具体例子理解主题匹配和消息传递语义。

浏览全部手册
本页目录

Topic 区分大小写

device/A/statusdevice/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 数据。

仍有疑问?按反馈清单整理复现信息 →