MQTT 的核心架构非常简洁,主要由 三个基本组件 构成。为了方便理解,我们继续使用“邮局系统”这个比喻。
MQTT 三大核心组件
- 代理 (Broker)
- 客户端 (Client)
- 主题 (Topic)
1. 代理 (Broker)
- 比喻:邮局中心
代理是 MQTT 系统的心脏和中枢神经。它是一个服务器软件,负责接收所有来自客户端的消息,并根据规则将这些消息准确地分发给相应的订阅者。所有的客户端都只与 Broker 通信,客户端之间从不直接连接。
核心职责:
- 接收连接:接受来自客户端的网络连接请求。
- 身份验证与授权:验证客户端的身份(用户名/密码、证书等),并确认它们是否有权限发布或订阅特定主题。
- 接收消息:接收来自发布者客户端的消息。
- 处理订阅:管理所有客户端的订阅请求,维护一个“谁订阅了什么主题”的列表。
- 路由消息:这是 Broker 最核心的功能。当它收到一条消息时,会立即查找订阅了该消息主题的客户端列表,并将消息转发给所有匹配的客户端。
- 会话管理:管理客户端的会话状态,包括处理持久会话、离线消息、遗嘱(Last Will)消息和保留消息(Retained Messages)。
常见 Broker 软件: Eclipse Mosquitto (轻量级,非常适合入门和中小型项目), EMQX (功能强大,高并发,专为企业级和大规模物联网平台设计), HiveMQ 等。
2. 客户端 (Client)
- 比喻:邮局的顾客(既可以是寄信人,也可以是收信人)
客户端可以是任何连接到 Broker 的设备或应用程序。它可以是嵌入式设备上的一个传感器,也可以是手机上的一个 App,或是一个后端服务。
一个客户端可以扮演两种角色,并且可以同时是发布者和订阅者。
A. 发布者 (Publisher)
- 角色:寄信人。
- 职责:
- 与 Broker 建立连接。
- 将包含数据的消息发布到一个指定的主题上。
- 发布者完成发布后,它的任务就结束了。它不关心谁会收到这个消息,也不需要知道是否有任何订阅者存在。
B. 订阅者 (Subscriber)
- 角色:收信人。
- 职责:
- 与 Broker 建立连接。
- 向 Broker 发送一个或多个订阅请求,告诉 Broker 它对哪些主题感兴趣。
- 等待并接收来自 Broker 的消息。
- 订阅者只关心它感兴趣的主题,它不关心消息是哪个发布者发送的。
3. 主题 (Topic)
- 比喻:信件上的地址 或 杂志的频道名称
主题不是一个物理组件,而是一个消息标签或通信渠道。它是一个 UTF-8 编码的字符串,用于让 Broker 对消息进行分类和路由。
核心特性:
-
层级结构 (Hierarchical):主题由一个或多个层级组成,层级之间用斜杠
/分隔,非常像文件系统的路径。- 例如:
smart_home/living_room/temperature - 这个结构使得主题管理非常灵活和有条理。
- 例如:
-
消息过滤的核心:Broker 正是利用主题来决定将消息发送给哪些订阅者。
-
支持通配符 (Wildcards):这是主题非常强大的一个特性,允许订阅者一次性订阅多个匹配的主题。
- 单层通配符
+:匹配单个层级。- 订阅
smart_home/+/temperature可以收到来自smart_home/living_room/temperature和smart_home/bedroom/temperature的消息,但收不到smart_home/garage/light/status的消息。
- 订阅
- 多层通配符
#:匹配任意数量的层级(必须在主题的末尾)。- 订阅
smart_home/#可以收到smart_home下所有子主题的消息,包括smart_home/living_room/temperature和smart_home/garage/light/status。
- 订阅
- 单层通配符
工作流程示例
让我们把这三个组件串起来,看看一个完整的通信流程:
-
准备阶段:
- 一个客户端 A(例如,一个手机 App)连接到 Broker,并订阅了主题
home/light/status。 - 一个客户端 B(例如,一个智能灯泡)也连接到 Broker。
- 一个客户端 A(例如,一个手机 App)连接到 Broker,并订阅了主题
-
发布消息:
- 客户端 B (发布者) 的状态发生了改变(比如灯被打开了)。
- 它向 Broker 发布一条消息,消息的主题是
home/light/status,消息的内容 (Payload) 是"ON"。
-
Broker 路由:
- Broker 接收到这条消息。
- 它检查自己的订阅列表,发现客户端 A 订阅了
home/light/status这个主题。
-
接收消息:
- Broker 立即将消息 (
"ON") 转发给客户端 A。 - 客户端 A (订阅者) 收到消息,并在界面上显示“灯已打开”。
- Broker 立即将消息 (
总结
这三个组件——代理 (Broker)、客户端 (Client) 和 主题 (Topic)——协同工作,构成了 MQTT 协议强大而灵活的通信基础。理解它们各自的角色以及它们之间的交互方式,是掌握 MQTT 的关键。
1万+

被折叠的 条评论
为什么被折叠?



