Appearance
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 会自动发布这条消息到指定主题。这通常用于检测设备离线状态。