乐闻世界logo
搜索文章和话题

MQTT 的发布/订阅模式是如何工作的?

2月21日 15:45

MQTT 的发布/订阅模式是一种消息传递架构,它解耦了消息的生产者和消费者,实现了灵活的一对多通信。

核心概念

1. 主题(Topic)

  • 定义:主题是消息的路由地址,采用层级结构
  • 格式:使用斜杠(/)分隔的字符串,如 home/livingroom/temperature
  • 特点
    • 层级清晰,便于组织和管理
    • 支持通配符订阅
    • 大小写敏感
    • 长度限制:最多 65535 字节

2. 发布者(Publisher)

  • 角色:消息的生产者
  • 功能:向特定主题发送消息
  • 特点
    • 不需要知道订阅者的存在
    • 可以同时向多个主题发布消息
    • 发布后立即返回,不等待订阅者响应

3. 订阅者(Subscriber)

  • 角色:消息的消费者
  • 功能:订阅感兴趣的主题,接收相关消息
  • 特点
    • 可以订阅多个主题
    • 可以使用通配符订阅一类主题
    • 只接收订阅后发布的消息

4. Broker(代理服务器)

  • 角色:消息的中转站和路由器
  • 功能
    • 接收发布者发送的消息
    • 根据订阅关系将消息分发给订阅者
    • 管理客户端连接和会话
    • 处理消息的 QoS 保证

工作流程

  1. 连接建立:客户端(发布者/订阅者)连接到 Broker
  2. 订阅主题:订阅者向 Broker 发送订阅请求
  3. 发布消息:发布者向特定主题发送消息
  4. 消息路由:Broker 接收消息,查找订阅该主题的客户端
  5. 消息分发:Broker 将消息转发给所有订阅者
  6. 消息接收:订阅者接收并处理消息

通配符订阅

单级通配符(+)

  • 匹配单个层级
  • 示例:home/+/temperature 匹配 home/livingroom/temperature,但不匹配 home/livingroom/kitchen/temperature

多级通配符(#)

  • 匹配多个层级,必须放在主题末尾
  • 示例:home/# 匹配 home/ 下的所有主题

优势

  1. 解耦性:发布者和订阅者完全解耦,互不依赖
  2. 灵活性:支持一对多、多对一、多对多的通信模式
  3. 可扩展性:易于添加新的发布者和订阅者
  4. 异步性:发布者不需要等待订阅者响应
  5. 高效性:Broker 负责消息路由,减少网络开销

与点对点模式的对比

特性发布/订阅模式点对点模式
耦合度
消息接收者多个一个
消息持久化可选通常需要
复杂度中等简单
适用场景广播、通知直接通信

MQTT 的发布/订阅模式使其成为物联网、实时通信和消息推送等场景的理想选择。

标签:MQTT