对于高频发布的状态消息,发布时设置服务质量为0,保留为false。
对于低频发布的控制消息,发布时设置服务质量为2,希望新订阅者启动时或旧订阅者重启时每次都收到,则设置保留为true,如果不希望每次都收到则设置保留为false。
根据业务场景选择QoS等级,例如:
- 设备数据采集:使用
QoS 0降低网络负担 - 控制指令:使用
QoS 1确保指令送达 - 高价值业务:采用
QoS 2保障唯一性
需要注意的是 MQTT 发布与订阅操作中的 QoS 代表了不同的含义:发布时的 QoS 表示消息发送到 MQTT 服务器 使用的 QoS 等级,订阅时的 QoS 表示 MQTT Broker 向自己转发消息时可以使用的最大 QoS 等级。需要保障发送与订阅的 QoS 一致,才能确保最终收到的消息是固定的 QoS 等级,否则会出现消费降级的情况。例如:A 发送的消息 QoS 为 2,B 订阅的消息 QoS 为1,则最终接收到消息的 QoS 为 1。
保留消息的作用和用法
MQTT Retain 消息的主要作用是确保即使客户端(如设备)离线或延迟订阅主题,仍能接收最新消息,让设备每次启动后都收立即收到最后设置的消息。
核心功能
- 消息保存:当消息发布时设置 Retain 标志为 true,服务器Broker 会保存该消息,直到被新消息替换或过期。 一个Topic只能有一条Retained消息,发布新的Retained 消息将覆盖老的 Retained 消息(所以想删除一个 Retained 消息也很简单,只要向这个主题发布一个 Payload 长度为 0 的 Retained 消息就可以了)
- 离线场景适用:客户端离线期间,服务器持续保存最新消息。重新上线后,客户端可立即接收保留消息,无需等待新消息发布。
- 设备重启适配:设备重启或重新订阅主题时,能立即获取到离线期间的服务端保留消息。
典型应用场景
- 智能家居温度检测:温度检测设备定时发布室温数据,显示设备重启后仍能获取最新数据
- 广告屏管理:广告屏夜间休眠时接收保留消息,白天开机后直接显示最新广告内容
- 工业控制:设备周期性发送配置信息,即使客户端延迟订阅也能获取最新配置
注意事项
- 每个主题仅保存一份最新保留消息,旧消息会被覆盖
- 可通过设置消息过期时间自动删除旧保留消息
-
新的订阅者在订阅成功后也会立即收到订阅的主题的Retained 消息,如果订阅者重复订阅一个主题,也会被当做新的订阅者,然后收到 Retained true的 消息。重启客户端重新订阅也是新的订阅者。
-
Broker 收到 Retained 消息后,会单独保存一份,再向已订阅者发送一份普通的消息(Retained 标识为 0)。当有新订阅者的时候, Broker 会把保存的这条消息发给新订阅者(Retained 标识为 1)。
1086

被折叠的 条评论
为什么被折叠?



