3. MQTT核心概念:Broker、Topic、QoS等级、保留消息、遗嘱消息
好,咱们今天来啃MQTT最核心的几个概念。说实话,我见过不少新手,上来就写代码,结果连Broker和Topic都分不清,最后调试到崩溃。别急,咱们一个一个捋清楚。
3.1 Broker:消息的中枢神经
Broker,说白了就是MQTT的服务器。所有设备都连到它身上,它负责收消息、转发消息。你可以把它想象成一个邮局——你只管把信投进去,至于信怎么送到收件人手里,那是邮局的事。
Broker的核心职责:
- 接收连接:处理客户端的CONNECT请求,验证身份
- 消息路由:根据Topic把消息从发布者转发给订阅者
- 会话管理:维护客户端的在线状态和离线消息
- QoS保障:根据服务质量等级确保消息送达
我个人习惯用 Mosquitto 做本地测试,轻量、稳定。生产环境的话,EMQX或VerneMQ更靠谱。我在一个智慧农业项目里用过EMQX集群,同时扛了5万个传感器连接,稳得很。
3.2 Topic:消息的地址标签
Topic就是消息的主题,类似快递单上的地址。发布者发消息时指定Topic,订阅者订阅感兴趣的Topic,Broker负责匹配。
Topic的命名规则:
- 用斜杠
/分层,比如sensor/temperature/room1 - 支持通配符:
+匹配单层:sensor/+/room1匹配sensor/temperature/room1和sensor/humidity/room1#匹配多层:sensor/#匹配sensor/temperature/room1和sensor/humidity/room1/floor2
嗯,这里要注意:Topic不能以 / 开头或结尾,也别用空格和特殊字符。我曾经见过有人用中文Topic,结果客户端编码不一致,消息死活收不到……后来全改成英文加下划线了。
项目/设备类型/设备ID/数据类别。比如 greenhouse/sensor/001/temperature。
3.3 QoS等级:消息的可靠性保障
QoS(Quality of Service)是MQTT最核心的机制之一。它定义了消息传递的可靠性等级。你想想看,如果传感器上报的温度丢了,那整个控制系统可能就乱套了。
三个等级的区别:
| 等级 | 名称 | 发送次数 | 可靠性 | 适用场景 |
|---|---|---|---|---|
| QoS 0 | 至多一次 | 1次 | 最低 | 环境温度、GPS位置(丢了也无所谓) |
| QoS 1 | 至少一次 | 至少1次 | 中等 | 设备状态、告警信息(不能丢,但可以重复) |
| QoS 2 | 恰好一次 | 2次握手 | 最高 | 支付指令、关键控制(不能丢也不能重复) |
我刚开始做物联网时,所有消息都用QoS 2,觉得越可靠越好。结果呢?网络稍微一波动,消息堆积如山,Broker直接内存爆了。后来才明白:QoS 2开销很大,别滥用。
3.4 保留消息:新订阅者的"见面礼"
保留消息(Retained Message)是个很贴心的设计。当发布者发送消息时,如果设置了 retain=true,Broker就会把这条消息存起来。新客户端订阅这个Topic时,Broker会立刻把保留消息推给它。
有什么用?
- 新设备上线后,立刻知道当前状态,不用等下一次更新
- 掉线重连后,快速恢复现场
- 减少不必要的查询请求
举个例子:温度传感器每隔5分钟上报一次温度。如果新设备订阅了 sensor/temperature,没有保留消息的话,它得等最多5分钟才能拿到数据。有了保留消息,一订阅就拿到最新值。
3.5 遗嘱消息:设备"临终"的交代
遗嘱消息(Will Message)是MQTT里最有人情味的设计。设备在连接Broker时,可以预先设置一条遗嘱消息。如果设备异常断开(比如断电、断网),Broker就会替它把这条消息发出去。
遗嘱消息的配置:
// 伪代码示例
client.connect({
will: {
topic: 'device/001/status',
payload: 'offline',
qos: 1,
retain: true
}
});
我在一个冷链监控项目里用过这个功能。冷柜里的传感器一旦掉线,Broker立刻发布遗嘱消息,监控系统马上报警。嗯,有一次传感器电池没电了,遗嘱消息帮我们提前发现了问题,避免了一整批疫苗报废。
遗嘱消息的触发条件:
- 网络断开(TCP连接中断)
- 设备异常关机
- 心跳超时(Keep Alive)
注意:设备主动发送DISCONNECT报文时,遗嘱消息不会被触发。所以正常关机时,设备应该主动发一条"online=false"的消息,而不是依赖遗嘱。
Broker是邮局,Topic是地址,QoS是快递等级,保留消息是公告栏,遗嘱消息是临终遗言。把这五个概念吃透了,MQTT你就入门了。
好了,这一章的内容就到这儿。下一章咱们聊聊MQTT的安全机制——TLS加密和认证授权。这些东西在生产环境里是绕不开的,提前准备好不吃亏。