You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQTT QoS 2中PUBCOMP报文丢失会引发哪些技术问题?

MQTT QoS 2 中 PUBCOMP 报文丢失的处理逻辑

MQTT QoS 2 是可靠性最高的级别,通过四次握手保证消息仅交付一次:

  • PUBLISH:发布者向代理发送消息
  • PUBREC:代理确认收到消息,发布者未收到则重发PUBLISH
  • PUBREL:发布者收到PUBREC后发送该报文
  • PUBCOMP:代理发送该报文表示消息处理完成

当PUBCOMP报文在传输中丢失时,流程会按以下逻辑恢复:

发布端的处理

发布者发送PUBREL后会启动超时定时器,若超时未收到PUBCOMP,会重复发送相同报文ID的PUBREL,直到收到PUBCOMP确认。这里PUBREL是幂等报文——重复发送不会引发代理重新处理消息,仅触发PUBCOMP重发。

代理端的处理

代理首次收到PUBREL后,会完成消息的最终交付(确保订阅者仅收到一次),随后发送PUBCOMP。但代理不会立即清除该报文ID的相关状态:

  • 它会记录该报文ID对应的PUBREL已处理、消息已完成交付
  • 再次收到相同报文ID的PUBREL时,代理不会重复交付消息给订阅者,只会直接重发PUBCOMP
  • 只有在确认发布者已收到PUBCOMP(或经过足够时长判定无后续重发),代理才会彻底清除该报文ID的状态记录

对“仅一次交付”的保障

整个流程的核心是PUBREL的幂等性:无论发布者重发多少次PUBREL,代理都只会完成一次消息交付,后续的PUBREL仅触发PUBCOMP重发,不会导致订阅者收到重复消息,完全符合QoS 2的可靠性要求。

内容的提问来源于stack exchange,提问作者Ali Ehyaie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:52:35