协议指南

MQTT QoS 0、1、2 对比

用交付语义、确认流程和成本选择合适的 QoS,而不是机械选择数字。

QoS 指南

先选择交付契约,再选择数字。

QoS 是产品和运维决策。要按重试成本、重复容忍度和消息价值来选。

PUBLISH

最多一次

适合高频遥测,发送后不等待确认,下一条读数通常比重试更重要。

  • 确认流程
  • 网络成本最低
  • 适合场景传感器流

用 QoS 指南按重复容忍、重试成本、延迟和业务价值选择 MQTT 消息交付语义。

决策模型

QoS 首先是运维选择,其次才是协议数字。

QoS 0、1、2 在延迟、确认、重试和 Broker 工作量之间取舍。不同 Topic 应按消息价值分别选择。

  • QoS 0 适合高频可替代遥测
  • QoS 1 适合可幂等处理的命令与告警
  • QoS 2 适合少量高价值状态变更
  • 按 Topic 混用 QoS,而不是全局统一
消费者行为

消费者要匹配所选 QoS。

QoS 1 可能重复投递,消费者必须幂等;QoS 2 降低协议层重复,但业务层仍需要持久化状态。

  • 使用消息 ID 或状态版本
  • 命令处理保持幂等
  • 有副作用时记录已处理事件
  • 测试断线与重连行为
成本

更高 QoS 会增加网络与 Broker 工作。

每次确认都有成本。在移动、卫星、电池供电或高频遥测网络中,不必要的 QoS 会降低吞吐并增加能耗。

  • 用真实网络测量延迟
  • 不要为所有遥测使用 QoS 2
  • 文档化 Topic 级 QoS
  • 单独测试 Retained 与离线队列