在物联网时代,数以亿计的设备需要在不稳定的网络环境中交换数据。传统的 HTTP 请求-响应模式在设备数量庞大、网络波动频繁的场景下显得力不从心——连接开销大、服务器压力重、设备休眠时无法接收消息。MQTT 以其轻量、开放、简单的设计,成为了物联网通信的事实标准协议。
一、发布订阅模式:解耦生产者与消费者
MQTT 的核心是发布/订阅(Publish/Subscribe)模式,与 HTTP 的请求/响应模式有本质区别。HTTP 中客户端直接向服务器发起请求,双方必须同时在线且知道对方地址;MQTT 中发布者将消息发布到主题,订阅者订阅感兴趣的主题,Broker 负责路由分发。
这种模式的优势在于时间解耦(发布者和订阅者不需要同时在线)、空间解耦(不需要知道对方 IP)、一对多分发(一条消息推送给成百上千订阅者)。
二、QoS 等级:根据业务场景选择可靠性
MQTT 定义了三个服务质量等级,适应不同的可靠性需求:
发送后不确认,可能丢失。适合高频可容忍丢失的数据,如传感器周期上报。
等待 PUBACK 确认,超时重传,可能重复。适合指令下发、告警通知。
四次握手确保不丢失不重复。适合金融交易、关键配置下发。
选择 QoS 的原则:在满足业务需求的前提下,尽量使用低等级 QoS 降低网络和设备开销。QoS 2 的开销是 QoS 0 的数倍,不应滥用。
三、遗嘱消息:设备异常下线的"最后一句话"
在物联网场景中,设备可能因为断电、网络中断、崩溃等原因异常下线,管理端无法及时感知。MQTT 的遗嘱(Last Will and Testament, LWT)机制解决了这个问题:
设备在连接 Broker 时预先注册一条遗嘱消息(主题 + 内容 + QoS + 保留标志)。当设备异常断开(未发送 DISCONNECT)时,Broker 自动将遗嘱消息发布给所有订阅者。
四、保留消息与持久会话
保留消息(Retained Message):Broker 为每个主题保存最后一条保留消息。新订阅者订阅该主题时立即收到,无需等待下一次发布。适用于设备状态、最新配置等场景。
持久会话(Clean Session = false):Broker 为客户端保存订阅关系和未确认的 QoS 1/2 消息。设备断线重连后自动恢复订阅并接收离线消息,确保不遗漏。这对网络不稳定的移动设备和低功耗休眠设备至关重要。