MQTT 协议入门与实践
什么是 MQTT
MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级物联网通信协议,由 IBM 于 1999 年发布。它设计用于低带宽、高延迟、不可靠网络环境下的设备间通信,是物联网领域最流行的协议之一。
核心概念
- Broker(代理服务器):消息中枢,负责接收和转发所有消息
- Topic(主题):消息的分类标签,如
/home/sensor/temperature - Publisher(发布者):发送消息到指定 Topic 的设备
- Subscriber(订阅者):接收指定 Topic 消息的设备
QoS 服务质量
MQTT 提供三级服务质量,根据场景选择:
| QoS | 名称 | 说明 | 适用场景 |
|---|---|---|---|
| 0 | 最多一次 | 消息只发一次,不确认,可能丢失 | 传感器高频上报 |
| 1 | 至少一次 | 确保到达,但可能重复 | 一般遥测数据 |
| 2 | 恰好一次 | 保证到达且不重复(开销大) | 关键控制指令 |
常用 Broker 对比
| Broker | 特点 | 适用 |
|---|---|---|
| Mosquitto | C 实现,轻量,单机首选 | 嵌入式/小规模 |
| EMQX | Erlang 实现,高并发,万级连接 | 企业级/IoT 平台 |
| NanoMQ | C 实现,超轻量,边缘端 | 边缘计算 |
| HiveMQ | Java 实现,商业支持好 | 工业/汽车 |
Mosquitto 快速部署
# Ubuntu/Debian 安装
sudo apt install mosquitto mosquitto-clients
# 启动 Broker
sudo systemctl start mosquitto
# 订阅测试
mosquitto_sub -t "test/topic" -v
# 发布测试
mosquitto_pub -t "test/topic" -m "Hello MQTT"
通配符规则
- 单层
+:匹配一层,如sensor/+/temp匹配sensor/1/temp - 多层
#:匹配所有子层,如sensor/#匹配sensor/1/temp、sensor/2/humi
提示:
#只能放在结尾,+可用于中间层。