MQTT之重复消息产生
1. MQTT协议特性导致的重复(本质原因)
1.1 QoS机制引发
-
QoS 1(至少一次):
-
Broker未及时返回PUBACK时,设备会重发消息
-
重发间隔通常为5-15秒(依赖实现)
-
// 设备端发布消息(QoS 1) mqttClient.publish("device/123/data", payload, 1, false);
-
时序:sequenceDiagram participant Device participant Broker Device->>Broker: PUBLISH (PacketID=123) Broker--x Device: PUBACK (因网络延迟500ms) Note over Device: 在300ms超时后重发 Device->>Broker: PUBLISH (PacketID=123 重传) Broker-->>Device: PUBACK (原始ACK到达) Broker-->>Device: PUBACK (重传ACK到达) Note over Broker: 同一消息处理两次 场景一:ACK延迟导致的"双胞胎消息" 比喻: 就像你给朋友发微信问"晚上吃饭吗?",等了3分钟没收到回复,你又发了一遍。结果: 你朋友其实
-