首页/网络/工控与物联网速查/MQTT三个QoS等级的含义与代价
物联网协议60 条

MQTT三个QoS等级的含义与代价

QoS 表示同一段连接上消息投递的保证强度:0 至多一次、1 至少一次、2 恰好一次。它是发布与订阅两段各自协商的结果,不是端到端承诺,因此应用层仍需幂等与去重设计。

工控与物联网速查网络更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​​‌​‌‌​‌‌‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​​‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌​‌‌​​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

QoS 是分段承诺

QoS 描述的是客户端与代理之间这一段连接上的投递保证。发布方向代理发送、代理向订阅方转发,是两次独立协商,订阅方最终收到的等级取发布消息的 QoS 与订阅时请求的 QoS 中较小的那个。等级越高,握手报文越多、需要的存储与内存越大,吞吐下降也越明显。

三级对照

等级语义交互代价
QoS 0至多一次,可能丢失单向发布,无确认开销最小,适合高频遥测
QoS 1至少一次,可能重复发布与确认两步需要应用侧去重
QoS 2恰好一次,不重复不丢失发布、接收、释放、完成四步握手延迟与存储开销最大,吞吐下降明显

等级如何生效

等级如何生效
# 发布侧指定 QoS:0 只发一次,链路异常即丢
# QoS 1:等待确认报文,未收到时重发同一条消息
# QoS 2:四步握手,确认接收后再释放报文标识
# 订阅侧请求 QoS 1,而发布侧使用 QoS 0,订阅方实际收到 QoS 0
# 会话保持会保存未确认的 QoS 1 与 QoS 2 消息,QoS 0 不保存

典型使用场景

  • 周期性遥测:数值会被下一条覆盖,可用 QoS 0 换取吞吐与电量
  • 告警与状态变更:不允许静默丢失,至少用 QoS 1 并做去重
  • 计费与结算类数据:需要严格不重复,配合平台侧主键做幂等
  • 离线补传:依赖持久会话与 QoS 1 把断线期间的消息补发出去
QoS 1 的重复来自重发机制:确认报文丢失时发布方会重发同一条消息,接收方需要靠报文标识或业务主键判重。
全链路使用 QoS 2 是与吞吐量直接冲突的选择,只有在重复交付的代价确实高于吞吐损失时才值得使用。

易错点

  • 以为 QoS 是端到端保证:实际两段独立协商,最终等级取两者较小值
  • 以为 QoS 2 可以省掉业务去重:它只约束协议层交付,跨会话与业务层仍需幂等
  • 全链路使用 QoS 2:握手与存储开销成倍增加,吞吐与延迟同时恶化
  • 用 QoS 0 传输计费或告警数据:链路抖动时静默丢失,事后无法追溯
  • 把 QoS、保留消息与持久会话当成同一件事:三者分别控制投递保证、新订阅者的初始状态与离线消息留存,不能互相替代

数据来源与参考

  • OASIS MQTT Version 3.1.1 规范(QoS 章节)
  • OASIS MQTT Version 5.0 规范(QoS 与流控章节)

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/ics/mqtt-qos-levels-meaning.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​​‌​‌‌​‌‌‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​​‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌​‌‌​​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​