跳到主内容
快讯直播
AI智模界
AI 词典

MQTT:不是消息队列的轻量发布订阅协议

一句话定义:MQTT(Message Queuing Telemetry Transport)是一种建立在 TCP 之上的轻量级发布/订阅协议,专为带宽小、网络不稳、设备算力有限的场景设计。名字里带“Message Queuing”,但它并不是消息队列。

三个角色

发布者(publisher)、订阅者(subscriber),以及中间的 broker(代理)。发布者不直接找订阅者,而是给消息打上一个“主题”(topic,如 factory/line3/temp)发给 broker;订阅者事先告诉 broker 自己关心哪些主题,还能用通配符 factory/+/temp 一次订阅多条产线。broker 只做一件事:按主题把消息投给关心的订阅者。

打个比方,它更像小区的公告栏,而不是快递柜:写公告的人贴到对应栏目,谁关心谁自己去看;贴的人不知道谁在看,看的人也不知道谁在贴——这就是解耦。公告栏管理员不替你保管三个月的旧公告,也不保证一条公告只有一个人读到。

QoS 是“投递努力程度”,不是“业务只消费一次”

QoS 0:最多一次,发出去就不管,可能丢。QoS 1:至少一次,收到要回执,没回执就重发,可能重复。QoS 2:恰好一次,通过多步握手在协议层面做到不重不漏。

关键在于:QoS 2 的“恰好一次”只覆盖客户端与 broker 之间的这一段链路。如果订阅端先执行业务再回执,中途进程崩溃重启;如果存在桥接(bridge)或多级 broker;如果消息在应用层又转了一手——重复照样会发生。所以只要涉及钱、库存、工单这类有副作用的操作,业务侧必须自己做幂等,比如用消息 ID 或业务主键去重。把 QoS 当“防重复开关”用,是这类系统最常见的线上事故来源之一。

和消息队列、HTTP 的区别

维度MQTT消息队列(Kafka、RabbitMQ 等)HTTP 请求
通信模型发布/订阅,按主题过滤队列/日志,消费组竞争消费请求—响应
连接方式长连接 + 心跳长连接多为短连接
报文开销极小,适合弱网低功耗较大头部开销大
历史消息broker 一般不留可长期堆积、回放无
典型场景海量设备上下行指令服务间解耦、数据管道前后端接口

对从业者的意义

物联网、车联网、移动推送、工业设备监控是它的主场。放到 AI 项目里,边缘推理盒子用 MQTT 上报设备状态和推理结果,云端用 MQTT 下发模型更新通知、阈值调整指令,都是典型用法。但别拿它当数据湖:它不擅长长期堆积和回放,训练数据该落到消息队列或对象存储。常见做法是两者组合——MQTT 管设备侧最后一段链路,消息队列管后端数据管道。

具体实现细节和各 broker 的能力边界,以官方文档为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。