MQTT 的发布/订阅模式是一种消息传递架构,它解耦了消息的生产者和消费者,实现了灵活的一对多通信。
核心概念
1. 主题(Topic)
- 定义:主题是消息的路由地址,采用层级结构
- 格式:使用斜杠(/)分隔的字符串,如
home/livingroom/temperature - 特点:
- 层级清晰,便于组织和管理
- 支持通配符订阅
- 大小写敏感
- 长度限制:最多 65535 字节
2. 发布者(Publisher)
- 角色:消息的生产者
- 功能:向特定主题发送消息
- 特点:
- 不需要知道订阅者的存在
- 可以同时向多个主题发布消息
- 发布后立即返回,不等待订阅者响应
3. 订阅者(Subscriber)
- 角色:消息的消费者
- 功能:订阅感兴趣的主题,接收相关消息
- 特点:
- 可以订阅多个主题
- 可以使用通配符订阅一类主题
- 只接收订阅后发布的消息
4. Broker(代理服务器)
- 角色:消息的中转站和路由器
- 功能:
- 接收发布者发送的消息
- 根据订阅关系将消息分发给订阅者
- 管理客户端连接和会话
- 处理消息的 QoS 保证
工作流程
- 连接建立:客户端(发布者/订阅者)连接到 Broker
- 订阅主题:订阅者向 Broker 发送订阅请求
- 发布消息:发布者向特定主题发送消息
- 消息路由:Broker 接收消息,查找订阅该主题的客户端
- 消息分发:Broker 将消息转发给所有订阅者
- 消息接收:订阅者接收并处理消息
通配符订阅
单级通配符(+)
- 匹配单个层级
- 示例:
home/+/temperature匹配home/livingroom/temperature,但不匹配home/livingroom/kitchen/temperature
多级通配符(#)
- 匹配多个层级,必须放在主题末尾
- 示例:
home/#匹配home/下的所有主题
优势
- 解耦性:发布者和订阅者完全解耦,互不依赖
- 灵活性:支持一对多、多对一、多对多的通信模式
- 可扩展性:易于添加新的发布者和订阅者
- 异步性:发布者不需要等待订阅者响应
- 高效性:Broker 负责消息路由,减少网络开销
与点对点模式的对比
| 特性 | 发布/订阅模式 | 点对点模式 |
|---|---|---|
| 耦合度 | 低 | 高 |
| 消息接收者 | 多个 | 一个 |
| 消息持久化 | 可选 | 通常需要 |
| 复杂度 | 中等 | 简单 |
| 适用场景 | 广播、通知 | 直接通信 |
MQTT 的发布/订阅模式使其成为物联网、实时通信和消息推送等场景的理想选择。