在上一篇文章中描述了PID相同产生的重复消息和PID不同产生的重复消息,这一篇文章解释一下为什么会有两种情况的产生。在 MQTT QoS 1 消息传递过程中,设备 B 重复接收消息的 情况 1 和 情况 2 的产生根源在于 MQTT 协议的分层处理机制和 Broker 的转发逻辑。以下是深度分析:
一、两种重复情况的本质区别
特征 | 情况 1(相同 Broker-PID 重复) | 情况 2(不同 Broker-PID 重复) |
---|---|---|
触发原因 | Broker → 设备 B 的 PUBACK 丢失 | 设备 A → Broker 的 PUBACK 丢失 |
PID 变化 | 设备 B 看到相同的 PID(如 200) | 设备 B 看到新的 PID(如 200→201) |
DUP 标志 | 重传时 Dup=1 | 可能 Dup=0(因 Broker 生成全新 PID) |
重复层级 | Broker 到设备 B 的传输层重复 | 设备 A 到 Broker 的源头级重复 |
二、情况 1 的产生机制(相同 PID 重复)
1. 场景复现
sequenceDiagrampar