在物联网时代,数以亿计的设备需要在不稳定的网络环境中交换数据。传统的 HTTP 请求-响应模式在设备数量庞大、网络波动频繁的场景下显得力不从心——连接开销大、服务器压力重、设备休眠时无法接收消息。MQTT 以其轻量、开放、简单的设计,成为了物联网通信的事实标准协议。

一、发布订阅模式:解耦生产者与消费者

MQTT 的核心是发布/订阅(Publish/Subscribe)模式,与 HTTP 的请求/响应模式有本质区别。HTTP 中客户端直接向服务器发起请求,双方必须同时在线且知道对方地址;MQTT 中发布者将消息发布到主题,订阅者订阅感兴趣的主题,Broker 负责路由分发。

📡 发布者 温度传感器 MQTT Broker 主题路由 会话管理 消息缓存 📊 监控大屏 订阅 sensor/# 📈 数据分析 订阅 sensor/temp 🔔 告警系统 订阅 alarm/# PUBLISH sensor/temp
图 1:MQTT 发布订阅架构——一条消息同时分发给多个订阅者

这种模式的优势在于时间解耦(发布者和订阅者不需要同时在线)、空间解耦(不需要知道对方 IP)、一对多分发(一条消息推送给成百上千订阅者)。

二、QoS 等级:根据业务场景选择可靠性

MQTT 定义了三个服务质量等级,适应不同的可靠性需求:

QoS 0
最多一次

发送后不确认,可能丢失。适合高频可容忍丢失的数据,如传感器周期上报。

QoS 1
至少一次

等待 PUBACK 确认,超时重传,可能重复。适合指令下发、告警通知。

QoS 2
恰好一次

四次握手确保不丢失不重复。适合金融交易、关键配置下发。

发送方 接收方 QoS 0:PUBLISH(无确认) QoS 1:PUBLISH → PUBACK QoS 2:PUBLISH → PUBREC → PUBREL → PUBCOMP
图 2:QoS 0/1/2 握手流程对比

选择 QoS 的原则:在满足业务需求的前提下,尽量使用低等级 QoS 降低网络和设备开销。QoS 2 的开销是 QoS 0 的数倍,不应滥用。

三、遗嘱消息:设备异常下线的"最后一句话"

在物联网场景中,设备可能因为断电、网络中断、崩溃等原因异常下线,管理端无法及时感知。MQTT 的遗嘱(Last Will and Testament, LWT)机制解决了这个问题:

设备在连接 Broker 时预先注册一条遗嘱消息(主题 + 内容 + QoS + 保留标志)。当设备异常断开(未发送 DISCONNECT)时,Broker 自动将遗嘱消息发布给所有订阅者。

设备 注册遗嘱 Broker 保存遗嘱 管理端 订阅状态 CONNECT + LWT ⚠ 设备异常断电(无 DISCONNECT) 自动发布遗嘱 "offline"
图 3:遗嘱消息工作流程——设备异常下线时 Broker 自动发布

四、保留消息与持久会话

保留消息(Retained Message):Broker 为每个主题保存最后一条保留消息。新订阅者订阅该主题时立即收到,无需等待下一次发布。适用于设备状态、最新配置等场景。

持久会话(Clean Session = false):Broker 为客户端保存订阅关系和未确认的 QoS 1/2 消息。设备断线重连后自动恢复订阅并接收离线消息,确保不遗漏。这对网络不稳定的移动设备和低功耗休眠设备至关重要。