MQTT
你可能会说
一堆设备要上报数据,HTTP 轮询太重,难道每台都自己写长连接?
面向 IoT 的轻量发布/订阅消息协议
也常被叫作MQTT 协议消息队列遥测传输
什么时候选它
- 设备上报数据、下发远程指令、OTA 升级
- 弱网、低带宽、低功耗设备(NB-IoT、模组、传感器)
- 设备量大,不同系统按主题订阅各自关心的数据
- 需要遗嘱消息、断线重连这类设备场景能力
什么时候别选
- 服务之间的业务消息(Kafka / RabbitMQ 更合适)
- 浏览器要直连(得走 MQTT over WebSocket 或后端桥接)
- 要求强一致事务和消息回溯的场景
容易混在一起 · 怎么分
MQTT≠Kafka
MQTT 解决「设备怎么连进来」,Kafka 解决「服务端数据怎么流」;生产里常见 MQTT 接入 → 桥接进 Kafka。
MQTT≠RabbitMQ
RabbitMQ 有 MQTT 插件,但重心在 AMQP 业务消息;海量设备连接要专门的 MQTT Broker(EMQX 等)。
MQTT≠WebSocket
MQTT 是消息协议,传输层可以走 TCP 也可以走 WebSocket;WebSocket 只是浏览器里的全双工通道。
Q面试会问什么
- 问:QoS 0/1/2 有什么区别?
答:0 最多一次,可能丢;1 至少一次,可能重复;2 通过四次握手保证恰好一次,开销最大。 - 问:遗嘱消息和 Keep Alive 干什么?
答:Keep Alive 靠心跳发现半开连接;设备异常断开时,Broker 代发遗嘱消息通知其他订阅方。 - 问:主题怎么设计?
答:用 / 分层,+ 匹配单层、# 匹配多层;注意 # 订阅的开销,并按租户/设备做权限隔离。 - 问:海量设备怎么扛?
答:Broker 集群 + 共享订阅分摊消费,按连接数规划资源,边缘网关先做汇聚再上行。
延伸阅读 · 权威出处