为何MQTT QoS 2中接收方会响应重发的PUBREL报文?

MQTT QoS2中PUBREL重发的疑问解答
接收方对重复PUBREL的处理
按照MQTT 3.1.1/5.0标准,接收方收到PUBREL并回复PUBCOMP后,需要丢弃的是该报文ID关联的原始PUBLISH消息内容,但会保留“该ID的PUBREL请求已处理”的状态标记:
- 当发送方重发
PUBREL时,接收方通过标记识别这是重复请求,无需重新投递原始消息,直接回复合法的PUBCOMP即可。 - 这完全符合标准要求,标准的核心是避免消息重复投递,而非拒绝处理重复的控制报文。
发送方重发PUBREL的原因
发送方发送PUBREL后会启动重发定时器:
- 若超时前未收到对应
PUBCOMP,则判定PUBREL或PUBCOMP在传输中丢失; - 为保证QoS2“恰好一次”的投递语义,发送方必须重发
PUBREL,直到收到PUBCOMP确认,确保整个QoS2流程闭环。
内容的提问来源于stack exchange,提问作者Cold snap
相关产品推荐
相关产品推荐

