MQTT 凭极轻的报文头、发布订阅解耦、可调 QoS 与遗嘱机制,稳稳站上海量物联网上报的主位。本节拆 MQTT 报文结构、连接流程、QoS 三档与主题/遗嘱,解答"为什么说它是物联网的默认选择"。
阅读完本节,你应当能够:
MQTT(Message Queuing Telemetry Transport)生于 1999 年,初衷就是服务极窄的卫星与物联网链路。它的设计决定性地迎合了前面章节反复强调的约束:报文头小到只有两三个字节、通过发布订阅让海量终端解耦、靠 broker 批量到平台。几十年后,它成了物联网上报的事实标准——被各大云平台、边缘网关、传感硬件广泛内置。
用一个词概括它的本体:轻量的发布订阅遥测传输。设备 publish 一条报文,broker 收下,再按主题推给订阅者。终端不用知道后端有几个系统在消费,后端也不用追着设备问。
MQTT 里的 broker(代理服务器)是整个消息的中枢。所有 MQTT 设备先连上 broker,broker 负责转发。这带来 2.3 讲过的解耦与异步,也让"证书、鉴权、路由、多订阅方"都集中在 broker 一处,模块好替换、扩展好做。

MQTT 的传输可靠性由 QoS 分级标价:
选 QoS 的直觉:上报数据选 QoS1 稳中求省,真金白银的命令选 QoS2,只有无所谓丢的才用 QoS0。别把每个包都开到 QoS2,否则网络空转在协议握手里。
把冷藏车上的十来个温度计串起来:每个传感器 publish 到 冷链/车厢X/温度(QoS1),broker 收到后按订阅推给三处——实时告警服务(温度越界立刻短信)、历史系统(存库分析)、司机App(实时当前值)。温度传感异常断电,broker 收到遗嘱,把该传感器标记离线并通知运维。一条几十字节的 MQTT 报文承载了整个业务闭环,这就是"默认选择"的底气。
"报文头只有两三个字节"这句卖点,值得亲眼看一次才信。一条发布 22 字节净荷的报文,MQTT 层的开销大概长这样:
[固定头] 1 字节 位标记(发布=0x30) + 剩余长度 [主题] 2 字节 长度前缀 + "t" ← 主题字段 [净荷] 22 字节 你真正要传的数据
对比一个 HTTP POST 动辄数百字节的头部,MQTT 把这部分压到个位数——这正是它敢说"为最窄链路的传感而生"的底气。省下的每一个字节,都在给电池和弱网带宽各松一口气。
除了 QoS,还有两个操纵杆在真实项目里常被用起来:
温湿度清单/+ 一把订阅该层级下的所有子主题,或用 # 捕获更深处。这让"按某类设备统一收数"变成一条订阅,别写十条。两个旋钮都只靠报文里一个标志位就能开——但用得好,能省掉前端一整套"轮询问状态"的代码。明白 MQTT 不只是"上报",这些机制才是它在平台侧长期住下去的原因。
MQTT 的省电和可靠,不只在报文头,更在 CONNECT 报文里那一堆参数怎么配。四个最影响行为的旋钮:
这四个旋钮很少被教程重点提,却常常是"设备忽连忽断、电池掉得快"的元凶。把 CONNECT 报文当一份"生辰八字"来配,你的 MQTT 才谈得上真正可用。
MQTT 不只是上报,真正让它"默认"的是下行也不含糊。以一台考勤门机为例,从平台发一条"允许员工 number 1024 开门":
1. 管理后台 publish 到主题 门机/1024/指令,QoS1,载荷 = 指令+序列号 2. broker 按订阅把指令推给门机(门机为及时收指令走保活订阅) 3. 门机执行“开门”并 publish 一条 ack 到 门机/1024/回执 4. 后台订阅回执主题,收到后更新设备状态机 5. 若指令 QoS1 会重复,回执带序列号,后台按序列号去重
这条链路每一步都落在前面讲过的机关上:QoS1 保证"至少到一次",序列号去重兜住"重复";指令带 no-reply 就会被遗嘱机制兜底;门机要时常在线就用 Keep Alive 撑着。理解这条下行闭环,你就明白 MQTT 的"默认选择"不是靠纯上传撑起来的,而是"上行上报 + 下行下发 + 遗嘱兜底"三位一体才立住。
MQTT 沉稳偏厚,还有更"极简"的一路。下一节看 CoAP 怎么在 UDP 上做轻量请求响应的瘦身派。