MQTT消息

对于高频发布的状态消息,发布时设置服务质量为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 消息的主要作用是确保即使客户端(如设备)离线或延迟订阅主题,仍能接收最新消息,让设备每次启动后都收立即收到最后设置的消息。

核心功能

  1. 消息保存‌:当消息发布时设置 Retain 标志为 true,服务器Broker 会保存该消息,直到被新消息替换或过期。 一个Topic只能有一条Retained消息,发布新的Retained 消息将覆盖老的 Retained 消息(所以想删除一个 Retained 消息也很简单,只要向这个主题发布一个 Payload 长度为 0 的 Retained 消息就可以了)
  2. 离线场景适用‌:客户端离线期间,服务器持续保存最新消息。重新上线后,客户端可立即接收保留消息,无需等待新消息发布。
  3. 设备重启适配‌:设备重启或重新订阅主题时,能立即获取到离线期间的服务端保留消息。 

典型应用场景

  • 智能家居温度检测‌:温度检测设备定时发布室温数据,显示设备重启后仍能获取最新数据 ‌‌
  • 广告屏管理‌:广告屏夜间休眠时接收保留消息,白天开机后直接显示最新广告内容 ‌‌
  • 工业控制‌:设备周期性发送配置信息,即使客户端延迟订阅也能获取最新配置 ‌‌

注意事项

  • 每个主题仅保存一份最新保留消息,旧消息会被覆盖
  • 可通过设置消息过期时间自动删除旧保留消息
  • 新的订阅者在订阅成功后也会立即收到订阅的主题的Retained 消息,如果订阅者重复订阅一个主题,也会被当做新的订阅者,然后收到 Retained true的 消息。重启客户端重新订阅也是新的订阅者。

  • Broker 收到 Retained 消息后,会单独保存一份,再向已订阅者发送一份普通的消息(Retained 标识为 0)。当有新订阅者的时候, Broker 会把保存的这条消息发给新订阅者(Retained 标识为 1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值