Skip to content

MQTT 协议概览

MQTT (Message Queuing Telemetry Transport) 是一种轻量级的发布/订阅消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计。它非常适合物联网 (IoT) 设备和移动应用。

核心概念

发布/订阅模型 (Pub/Sub)

MQTT 将消息发送者(发布者)和接收者(订阅者)解耦。

  • Broker (代理): 服务器,负责接收所有消息,过滤并将其分发给感兴趣的订阅者。
  • Client (客户端): 连接到 Broker 的设备或应用,可以发布消息或订阅主题。

Topic (主题)

消息通过主题进行路由。主题是一个用正斜杠 / 分隔的字符串,例如:

  • `home/livingroom/temperature`
  • `factory/machine-01/status`

通配符

  • + (单层通配符): 匹配一级层级。
    • `home/+/temperature` 匹配 `home/livingroom/temperature` 和 `home/kitchen/temperature`。
  • # (多层通配符): 匹配多级层级,必须是主题的最后一个字符。
    • `factory/#` 匹配 `factory/machine-01/status` 和 `factory/machine-02/logs/error`。

服务质量 (QoS)

MQTT 提供三种服务质量等级,以确保消息传递的可靠性:

  • QoS 0 (At most once): "至多一次",消息尽力发送,可能会丢失。无确认机制。
  • QoS 1 (At least once): "至少一次",保证消息到达,但可能会重复接收。需要 PUBACK 确认。
  • QoS 2 (Exactly once): "只有一次",保证消息只到达一次,且不丢失。使用四步握手机制,开销最大。

保留消息 (Retained Messages)

发布消息时可以将 Retained 标志设为 true。Broker 会保留该主题的最后一条消息。当新的订阅者订阅该主题时,会立即收到最后一条保留消息。这对于状态更新(如“设备在线”)非常有用。

遗嘱消息 (Last Will and Testament - LWT)

客户端连接时可以指定一条“遗嘱消息”。如果客户端非正常断开连接(如网络中断、电源故障),Broker 会自动发布这条消息到指定主题。这通常用于检测设备离线状态。