MQTT(轻量级消息中间件)基本使用指南

MQTT 介绍

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布 / 订阅模式(Pub/Sub) 消息传输协议,专为低带宽、不稳定网络环境设计,广泛应用于物联网(IoT)、移动设备、传感器网络等场景(如空气净化器、智能家居设备的远程控制)。


MQTT 核心特性

  1. 轻量级:协议头部精简(最小仅 2 字节),数据传输效率高,适合硬件资源有限的设备(如传感器、嵌入式设备)。
  2. 发布 / 订阅模式:消息发送者(发布者)与接收者(订阅者)解耦,无需直接建立连接,通过 “主题(Topic)” 传递消息。
  3. 支持 QoS(服务质量):提供三级消息可靠性保障,适应不同网络环境。
  4. 异步通信:设备可间歇性联网,重连后仍能接收离线期间的关键消息。
  5. 双向通信:支持设备向服务器上报数据(如传感器数据)和服务器向设备下发指令(如控制命令)。

MQTT 核心组件

  1. 发布者(Publisher)
    • 发送消息的设备 / 应用(如空气净化器上报 PM2.5 数据、小程序发送控制指令)。
    • 无需知道谁会接收消息,只需指定消息的 “主题(Topic)”。
  2. 订阅者(Subscriber)
    • 接收消息的设备 / 应用(如服务器接收设备数据、小程序接收设备状态更新)。
    • 通过订阅 “主题(Topic)” 声明自己感兴趣的消息。
  3. broker(服务器 / 代理)
    • 核心组件,负责接收发布者的消息,根据主题分发给所有订阅者。
    • 功能:消息路由、QoS 管理、会话保持、客户端认证等。
    • 常见实现:Eclipse Mosquitto、EMQX、AWS IoT Core、阿里云 IoT 平台等。
  4. 主题(Topic)
    • 消息的分类标识,采用层级结构(类似文件路径),用斜杠(/)分隔,例如:
      • device/airpurifier/123/status(设备 123 的状态上报)
      • device/airpurifier/123/command(向设备 123 下发指令)
    • 支持通配符订阅:
      • +:匹配单个层级,如device/+/123/status匹配所有类型设备的 123 号设备状态。
      • #:匹配多个层级(必须在末尾),如device/airpurifier/#匹配该设备的所有主题。

QoS(服务质量)等级

MQTT 定义了 3 种 QoS 等级,用于平衡消息可靠性与传输效率:

QoS 等级 含义 适用场景
QoS 0 最多一次:消息发送后不确认,可能丢失或重复。 非关键数据(如实时温度周期性上报)。
QoS 1 至少一次:消息确保到达,但可能重复(发送方收到接收方确认前会重发)。 重要数据(如设备状态变更)。
QoS 2 刚好一次:消息确保仅到达一次(通过两次握手确认)。 关键指令(如支付、设备控制指令)。

示例:空气净化器的开关机指令需用 QoS 2,确保指令仅执行一次;而 PM2.5 实时数据可用 QoS 0,偶尔丢失不影响整体监控。


连接与会话管理

  • 连接建立
    • 客户端(设备 / 小程序后端)通过 TCP 连接到 broker 的指定端口(默认 1883,加密端口 8883)。
    • 连接时需发送 CONNECT 报文,包含:
      • clientId:客户端唯一标识(如设备 SN)。
      • cleanSession:是否清除会话(false表示 broker 保存离线消息)。
      • 认证信息(username/password,或更安全的 TLS 双向认证)。
  • 会话保持
    • cleanSession=false,broker 会为客户端保存:
      • 未确认的 QoS 1/2 消息。
      • 客户端订阅的主题列表。
    • 客户端重连后,broker 会推送离线期间积累的消息(按 QoS 等级处理)。
  • 断开连接
    • 客户端发送 DISCONNECT 报文优雅断开,或网络异常时自动断开。
    • broker 检测到连接中断后,会根据会话设置决定是否保留消息。

消息结构

MQTT 消息由固定头部可变头部有效载荷(Payload) 组成:

  • 固定头部:包含消息类型(如 CONNECT、PUBLISH)、QoS 等级、剩余长度等(最小 2 字节)。
  • 可变头部:按需存在,如 PUBLISH 消息的可变头部包含主题名和消息 ID。
  • 有效载荷:实际传输的数据(如 JSON 格式的设备状态:{"pm25": 35, "power": "on"})。

安全机制

  • 传输加密:通过 TLS/SSL(即 MQTTS)加密通信,防止数据被窃听或篡改(端口 8883)。
  • 身份认证:
    • 基础认证:客户端连接时提供username/password,broker 验证后允许接入。
    • 证书认证:客户端与 broker 双向验证 X.509 证书,适合高安全性场景(如工业设备)。
  • 权限控制:broker 可配置主题访问权限(如设备只能发布自己的状态主题,不能订阅其他设备的指令主题)。

MQTT 在空气净化器小程序中的应用示例

  1. 设备上报数据

    • 空气净化器(发布者)定期向主题 device/airpurifier/{sn}/status 发布状态消息(QoS 1):

      {
             
             "pm25": 28, "formaldehyde"
评论 146
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨鸦_Cormorant

大家喜欢的话可以点个关注投币哟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值