基本概念

最近更新时间:2025-11-21 14:43:41

我的收藏

MQTT

一种物联网和移动互联网领域的行业标准协议,适合移动终端之间的数据传输。

MQTT 服务端

实现 MQTT 协议的服务端,负责保持和 MQTT 客户端的长连接,并且将消息路由到对应的客户端,或将消息转发到其他 MQTT 服务端节点,同时负责 MQTT 离线消息的存储。

MQTT 客户端

使用 MQTT 协议连接到 MQTT 服务端的设备或应用程序。

主题Topic

用来标识消息的分类和结构,Publisher 将消息发布到特定的主题上,Subscriber 订阅特定的主题以接收相关消息。

Topic前缀

Topic 前缀是消息队列 TDMQ MQTT 版中用于对具有相同层级前缀的 Topic 进行​​聚合管理和监控​​的核心概念。它允许您将多个具有共同前缀的子 Topic 视为一个逻辑整体来查看监控数据。

通配符

订阅者可以在订阅的主题中使用通配符来达到一次订阅多个主题的目的,MQTT 支持单层通配符(+)和 多层通配符(#)两种主题通配符,来满足不同的订阅需要。
单层通配符“+”可用于主题过滤器的任何层级,它可以在主题过滤器的多个层级中使用,并且可以与多层通配符结合使用。例如,“sport/tennis/+”匹配“sport/tennis/player1”和“sport/tennis/player2”,但不匹配“sport/tennis/player1/ranking”。此外,由于单层通配符仅匹配单个层级,“sport/+”不匹配“sport”,但匹配“sport/”。
“#” 可以匹配主题内的任意数量层级,多层通配符代表父级以及任意数量的子级。例如,如果一个客户端订阅了“sport/tennis/player1/#”,它将接收到这些主题名称发布的消息: “sport/tennis/player1”, “sport/tennis/player1/ranking”,“sport/tennis/player1/score/wimbledon”。“sport/#” 也匹配 topic 为 “sport”的消息,因为 “#” 包括父层级。

会话

会话是客户端与服务端有状态交互总和。会话持续时间可以与底层传输层网络连接一致,也可以包含多个传输层网络连接周期。

MQTT v5协议通过 Clean Start 和 Session Expiry Interval 两个字段定义 Session 的生命周期。
注意:
MQTT v3.1、MQTT v3.1.1仅包含 Clean Session 属性, 定义如下映射关系:
-
Clean Start
Session Expiry Interval
CleanSession=True
True
0
CleanSession=False
False
259,200

客户端标识符(Client Identifier)

Client ID 是每个客户端的唯一标识,用户需要自行根据业务场景保证全局唯一,使用相同的 ClientID 连接 MQTT 服务端会被拒绝。

QoS

QoS(Quality of Service)指代消息传输的服务质量,每条消息都可以在发送时单独设置 QoS。它包括以下级别:
QoS = 0代表最多分发一次,消息可能丢失。
QoS = 1代表至少达到一次,消息可以保证到达,但是可能重复。
QoS = 2 代表仅到达一次,消息保证到达,并且不会重复。

保留消息

保留消息用于确保新订阅 Topic 的设备能及时收到最新状态的消息,即使消息在设备订阅之前发布。当一个客户端发布一条带“保留”标志(Retain)的消息,代理服务器就会保留此条消息。因此,任何订阅了相应消息的主题都将接收到最后一条保留消息,即使最近消息发布者没有在活跃状态。

遗嘱消息

遗嘱消息用于在客户端异常断开连接时向其他订阅者通知其离线状态或执行一些预定义操作。当客户端异常断开连接时(例如网络故障或客户端崩溃),MQTT代理会自动将该遗嘱消息发布给其他订阅者,使得其他订阅者能够得知客户端的离线状态,或者执行一些预定义的操作,例如更新在线状态等。

共享订阅

共享订阅允许多个客户端共享一个主题的订阅,只有一个客户端接收到发布到该主题的消息。当主客户端离线时,能够无缝切换到其他客户端继续接收消息,以确保高可用性。