MQTT协议基础知识

一、MQTT核心特点

  1. 发布/订阅模式:MQTT采用发布和订阅机制,消息由发布者发送,订阅者接收。
  2. 轻量级协议:设计简洁,适合资源有限的设备。
  3. 专为物联网场景设计:适用于智能家居、传感器等物联网应用。
  1. 最短的报文仅2字节,通常用于心跳检测,客户端需定时发送心跳包以保持连接。
  2. MQTT协议主要分为两类角色:
    1. 客户端:包括发布者和订阅者。
    2. 代理服务器:如各类云平台。

二、MQTT客户端操作

1. 下载MQTTX客户端

MQTTX是常用的MQTT客户端工具。

2. 新建连接

  1. MQTT基于TCP协议,需要新建连接。

必备连接参数

3. 连接配置说明

  1. 测试服务器及端口设置

  1. 客户端ID

  1. 用户名、密码及加密端口

4. 客户端ID注意事项

  1. 创建两个MQTT窗口,设置相同用户名进行连接测试。

  1. 两个客户端会交替上线/下线,原因在于ID相同,连接会互相挤下线。

  1. 超时重试机制导致不断互相断开,需保证每个客户端ID唯一。

  1. 连接MQTT所需五个参数:服务器地址、端口、客户端ID、用户名、密码。

  1. 心跳报文用于保持连接活跃。

  1. 客户端设置心跳参数以保证通信稳定。

  1. 协议版本建议使用MQTT 3.1.1,目前应用最广泛。

三、MQTT主题与消息发送

1. 单层通配符

  1. 主题可通过 / 分层,但 / 不可位于开头或结尾。

  1. MQTT支持通配符,用于灵活订阅主题。

  1. 演示不使用通配符:右侧订阅主题,左侧发送消息。

  1. 点击发送后,订阅端可接收到消息。

  1. 使用加号通配符(+)订阅,可接收符合条件的消息。

  1. 若主题为bedroom和livingroom,不使用通配符无法同时接收。智能家居场景下,通配符可订阅所有传感器数据。

  1. 新的发送命令,只要主题前后相同,中间不同,也可以匹配。

  1. 主题中的通配部分可变,如1、2、3、4、5等均可匹配。

2. 多层通配符

  1. 多层通配符用 # 表示,匹配主题任意层级,且必须为主题最后一个字符。

  1. 使用井号订阅即为多层通配符,适合订阅所有子主题。

  1. 错误写法举例,需遵循多层通配符规则。单层通配符可灵活应用。

  1. 只要主题前缀一致,如mysensor/home/,都可收到消息。

  1. 通配符极大提升主题订阅灵活性。

  1. 多种主题发送均可匹配,满足mysensor/home/前缀即可。

3. 遗愿机制

  1. 遗愿机制可配置,断电后客户端会向MQTT发送最后一条消息,表示失去连接。

  1. 需订阅遗愿主题以接收遗愿消息。

  1. 客户端异常断开后,订阅端收到遗愿消息。

  1. 正常断开不会触发遗愿消息,只有异常断开才会。遗愿主题和内容在连接时已发送至代理服务器,异常断开时代理服务器会将遗愿消息推送给订阅者。

4. QOS通信质量

  1. MQTT适用于一般互联网场景,网络信号可能不稳定。

  1. 提供三种QOS通信质量:
    1. 最多一次(QOS 0):适用于不重要的数据,偶尔丢失无影响。
    2. 至少一次(QOS 1):确保至少收到一次,可能重复发送。
    3. 仅一次(QOS 2):严格保证消息只接收一次。
  2. 传感器数据一般建议使用QOS为0。

5. 清除会话

  1. 配置中有清除会话开关,开启后每次客户端建立新连接,历史订阅消息不会保留,断开后消息即销毁。

  1. 配置QOS=1,确保至少收到一次。断开右侧连接后发送消息,正常情况下不会收到历史消息。关闭清除会话后,重新连接可收到离线期间的消息。

  1. 清除会话机制确保消息管理灵活。

6. 保留消息

  1. 发送保留消息后,代理服务器会保存该消息。

  1. 先让订阅端下线,发送保留消息后,订阅端上线即可收到最新消息,并显示保留标识。
  2. 应用场景:如温度传感器每十分钟发布一次数据,设置保留消息后,APP客户端打开即能收到最新温度,无需等待下一次发布。

<!-- END -->

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐