MQTT之重复消息产生
1. MQTT协议特性导致的重复(本质原因)
1.1 QoS机制引发
-
QoS 1(至少一次):
-
Broker未及时返回PUBACK时,设备会重发消息
-
重发间隔通常为5-15秒(依赖实现)
-
// 设备端发布消息(QoS 1) mqttClient.publish("device/123/data", payload, 1, false);
-
时序:sequenceDiagramparticipant Deviceparticipant BrokerDevice->>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分钟没收到回复,你又发了一遍。结果: 你朋友其实
-