消息重傳
MQTT協議標准規范的一部分。
協議規定作為通信雙方 服務端 和 客戶端 對於自己發送到對端的 publish 消息都應該滿足其 服務質量的要求。
QoS 1:消息至少送達一次;即發送端會一直重發該消息,除非收到了對端對該消息的確認。是在MQTT協議的上層(即業務的應用層)相同QoS1 消息可能會受到多次。
QoS 2:消息只送達一次;即該消息在上層僅會接收到一次。
注:QoS 1 和QoS 2 的publish 報文在MQTT協議棧這一層都會發送重傳,
QoS 1 消息發生重傳后,在MQTT 協議棧上層,也會收到這些重發的publish消息。
QoS 2 消息無論如何重傳,最終在MQTT協議棧上層,都只會收到一條publish消息。。
消息重發的兩種場景
1、publish 報文發送給對端后,規定時間內未收到應答。則重發這個報文。
2、在保持會話的情況下,客戶端重連后; emqx會自動重發為應答的消息,以確保QoS 流程的正確。
文件 etc/emqx.conf 中
retry_interval duration 默認 30s 等待一個超時間隔,如果沒收到應答則重傳消息。
協議規范與設計
重傳對象
QoS 1 ,涉及2個報文,發送端和接收端各發送1次;這2個報文有相同的PacketId。只需要對publish報文進行重發。
QoS 2 , 涉及4個報文,發送端和接收端各發送2次;這4個報文有相同的PacketId。需要發送端對publish和pubrel報文進行重發。