MQTT 操作-保留消息
向指定主题发布一条保留消息
问题背景
将想要保留的消息发布到指定主题,后续订阅该主题的客户端可以立即收到该消息。
解决方案
在 写入 MQTT 节点配置对话框中将 保留 选项设置为 是,或者在发送到节点的消息中将 msg.retain 消息属性设置为 true。
示例

示例JSON
本示例复用 MQTT 操作-连接MQTT Broker 中的示例,向 sensors/livingroom/temp 主题发布消息。
运行结果
在将示例中的 写入 MQTT 节点的 保留 配置设置为 是 之后,新添加一个客户端,并重新部署,这是可以在 调试窗口看到发布之后立马看到有两条两条数据输出,因为设置了保留为是之后,只要有客户端订阅这个主题就会立马收到最后设置的这条保留消息

拓展
retained 是 MQTT 里 消息保留(retained message) 的一个重要属性。它的作用是:
当客户端向某个 主题(topic) 发布消息时,如果将 retained 标志设置为 true,MQTT Broker 会把这条消息存储下来,并把它标记为该主题的 “保留消息”。
这样就会有几个效果:
✅ 主要作用
-
新订阅者立即收到最新状态
- 如果有一个新的客户端订阅了这个主题,它会立刻收到 broker 保存的 retained 消息,而不需要等到下次有人发布消息。
- 这非常适合 状态类信息(例如设备上线/离线状态、传感器的最新数值)。
-
主题的“最后已知值”
- Retained 消息相当于为主题存了一份“最新快照”。
- 订阅者一连上就能知道这个主题的最后状态。
-
替代“初始化请求”
- 不用在客户端连接时再专门发请求询问状态,直接通过 retained 消息就能获取到。
⚠️ 注意事项
- 如果对某个主题发送 payload 为空的 retained 消息,Broker 会清除该主题的保留消息。
- Retained 消息只存储 每个主题最新的一条,不会存历史消息。
- 对于 高频传感器数据(如温度的实时曲线),通常不建议全部 retained,只需要关键状态保留。
📌 举例
假设有个设备发布在线状态:
topic: device/123/status
payload: "online"
retained: true
效果:
- Broker 会保存
"online"。 - 当一个新客户端订阅
device/123/status时,立即收到"online"。 - 如果设备掉线并发布
"offline"(也设置 retained),Broker 会覆盖旧的 retained 消息,新订阅者就会立刻收到"offline"。