mqtt通信协议知识点

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌
博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。
🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》https://blog.csdn.net/qq_57756904/category_12173599.html
有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。
最后再送一句:最好是学会了,而不是学废了!!
2
MQTT 核心知识点详解
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅协议,专为低带宽、高延迟或不稳定的网络环境设计,广泛应用于物联网(IoT)、移动应用和实时消息推送。
1. MQTT 基础概念
1.1 协议特点
-
轻量级:头部最小仅 2字节,适合嵌入式设备。
-
基于发布/订阅模型:解耦消息生产者和消费者。
-
支持 QoS(服务质量):提供 3 种消息可靠性级别。
-
低功耗:适合电池供电设备(如传感器)。
-
支持遗嘱消息(LWT):设备异常断开时发送预设消息。
1.2 通信角色
| 角色 | 作用 |
|---|---|
| Publisher | 发布消息到某个 Topic(如传感器上传数据)。 |
| Subscriber | 订阅感兴趣的 Topic,接收消息(如服务器接收传感器数据)。 |
| Broker | 消息代理(服务器),负责路由消息(如 Mosquitto、EMQX、HiveMQ)。 |
2. MQTT 核心机制
2.1 Topic(主题)
-
层级结构:用
/分隔,如sensor/temperature/room1。 -
通配符:
-
+:单层匹配(如sensor/+/room1匹配sensor/temperature/room1)。 -
#:多层匹配(如sensor/#匹配sensor/temperature/room1和sensor/humidity)。
-
2.2 QoS(服务质量)
| QoS 等级 | 描述 | 消息是否重复 | 是否保证到达 |
|---|---|---|---|
| 0 | 最多一次(At most once) | ❌ | ❌ |
| 1 | 至少一次(At least once) | ✔️ | ✔️ |
| 2 | 恰好一次(Exactly once) | ✔️ | ✔️ |
适用场景:
-
QoS 0:可容忍丢失的数据(如周期性传感器数据)。
-
QoS 1:重要但可重复的消息(如控制指令)。
-
QoS 2:关键数据(如支付交易)。
2.3 保留消息(Retained Message)
-
Broker 会保存 Topic 的最后一条消息,新订阅者立即收到该消息。
-
适用场景:设备上线后立即获取最新状态(如智能灯的最后开关状态)。
2.4 遗嘱消息(Last Will and Testament, LWT)
-
客户端异常断开时,Broker 自动发布预设消息。
-
用途:检测设备离线状态。
# 示例(Python Paho-MQTT)
client.will_set("device/status", "offline", qos=1, retain=True)
3. MQTT 连接流程
3.1 CONNECT 报文
客户端连接 Broker 时发送:
-
Client ID:唯一标识(如
device_123)。 -
Clean Session:
-
True:Broker 不保存会话状态(适合临时设备)。 -
False:Broker 保存订阅和未确认消息(适合持久连接)。
-
-
Keep Alive:心跳间隔(秒),超时后 Broker 认为连接断开。
3.2 认证与安全
-
用户名/密码:明文传输(建议配合 TLS 加密)。
-
TLS/SSL:加密通信(端口通常
8883)。 -
ACL(访问控制):限制客户端对 Topic 的读写权限。
4. 常用 MQTT Broker
| Broker | 特点 |
|---|---|
| Mosquitto | 轻量级,适合嵌入式和小规模部署。 |
| EMQX | 高性能,支持集群和规则引擎(企业级)。 |
| HiveMQ | 商业版,支持 MQTT 5.0 和插件扩展。 |
| AWS IoT Core | 云服务,集成 AWS 生态(如 Lambda、DynamoDB)。 |
5. MQTT 客户端开发示例
5.1 Python(Paho-MQTT)
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with code", rc)
client.subscribe("sensor/temperature")
def on_message(client, userdata, msg):
print(f"Received: {msg.topic} {msg.payload.decode()}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.hivemq.com", 1883, 60)
client.loop_forever()
5.2 JavaScript(MQTT.js)
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://broker.hivemq.com');
client.on('connect', () => {
client.subscribe('sensor/temperature');
client.publish('sensor/temperature', '25°C');
});
client.on('message', (topic, message) => {
console.log(`Received: ${topic} ${message.toString()}`);
});
6. MQTT 5.0 新特性
-
原因码(Reason Code):更精细的错误反馈。
-
共享订阅(Shared Subscription):实现负载均衡(多个消费者分担消息)。
-
消息过期(Message Expiry):设置消息的存活时间。
-
流量控制(Flow Control):限制客户端发送速率。
7. 典型应用场景
-
物联网(IoT)
-
传感器数据上报(如温度、湿度)。
-
远程设备控制(如智能家居)。
-
-
移动推送
-
实时通知(如聊天消息、订单状态)。
-
-
车联网
-
车辆状态监控(如 GPS 位置、故障报警)。
-
-
工业 4.0
-
设备状态监控与预测性维护。
-
8. 常见问题与优化
8.1 消息堆积
-
问题:低速消费者导致 Broker 积压消息。
-
解决:
-
增加消费者(共享订阅)。
-
设置
max_queued_messages限制队列长度。
-
8.2 安全性
-
风险:默认无加密(易受窃听)。
-
方案:
-
使用 TLS(
mqtts://)。 -
客户端认证(证书或 Token)。
-
8.3 性能优化
-
Broker 集群:横向扩展(如 EMQX 集群)。
-
持久化:消息存储到数据库(如 Redis、PostgreSQL)。
9. 学习资源
-
官方文档:MQTT 5.0 协议规范
-
工具:
-
书籍:《MQTT Essentials》、《Building IoT Applications with MQTT》
掌握 MQTT 的核心机制和 QoS 策略后,可以高效构建实时、低功耗的物联网系统。实际项目中需根据场景选择合适的 Broker 和安全方案。
3
更多推荐
所有评论(0)