MQTT协议
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,专为受限设备和低带宽、高延迟或不可靠的网络设计。
主要特点:
- 轻量级:协议头部仅2字节,最小化传输开销
- 发布/订阅模式:解耦消息发送者和接收者
- QoS机制:提供三种服务质量等级
- 保留消息:新订阅者可以立即获取最新状态
- 遗嘱消息:客户端异常断开时自动发布特定消息
- 会话保持:支持持久会话和清除会话
MQTT基于主题(Topic)的发布/订阅模式:
- 发布者(Publisher)将消息发送到特定主题
- 代理(Broker)接收消息并转发给订阅该主题的客户端
- 订阅者(Subscriber)接收其订阅主题的所有消息
这种模式实现了发布者和订阅者的完全解耦,双方无需知道对方的存在。
MQTT提供三种QoS(Quality of Service)级别:
QoS 0 (最多一次):
- 消息发送后不等待确认,可能丢失
- 最低开销,最高吞吐量
- 适用场景:传感器数据等允许丢失的场景
QoS 1 (至少一次):
- 确保消息至少送达一次,但可能重复
- 中等开销
- 适用场景:计费、日志等不能丢但可以重复的场景
QoS 2 (恰好一次):
- 确保消息只送达一次,不丢失不重复
- 最高开销,最低吞吐量
- 适用场景:金融交易、控制命令等关键业务
保留消息是一种特殊的消息,当发布到某个主题时,Broker会保存该消息:
- 任何新订阅该主题的客户端会立即收到最近的保留消息
- 每个主题只能有一个保留消息
- 发布空消息可以清除保留消息
应用场景:
- 设备状态报告
- 配置信息发布
- 系统公告
遗嘱消息(Will Message)是客户端连接到Broker时预设的一条消息,当客户端异常断开连接时,Broker会自动发布该消息:
- 在CONNECT报文中设置
- 包含主题、消息内容、QoS级别和保留标志
- 只在非正常断开时触发
主要用途:
- 通知其他客户端设备离线
- 发布设备最后状态
- 触发故障恢复机制
MQTT使用心跳机制维持连接:
- 保活时间(Keep Alive):客户端在CONNECT报文中设置表示客户端在无消息交换时最长允许的时间间隔单位为秒,0表示禁用心跳机制
- 心跳交换:如果在保活时间内没有消息交换,客户端必须发送PINGREQ服务器必须响应PINGRESP如果服务器在1.5倍保活时间内未收到任何消息,会断开连接
- 连接断开处理:正常断开: 客户端发送DISCONNECT. 异常断开: 触发遗嘱消息机制
- 本文标题:MQTT协议
- 创建时间:2026-08-11 11:26:21
- 本文链接:2026/08/11/mqtt/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论