mqtt 訊息重傳

2022-06-28 20:51:17 字數 847 閱讀 5421

訊息重傳

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報文進行重發。

MQTT訊息型別

客戶端到服務端的網路連線建立後,客戶端傳送給服務端的第乙個報文必須是connect報文 mqtt 3.1.0 1 在乙個網路連線上,客戶端只能傳送一次connect報文。服務端必須將客戶端傳送的第二個connect報文當作協議違規處理並斷開客戶端的連線 mqtt 3.1.0 2 有關錯誤處理的資訊請...

mqtt保留訊息

mqtt保留訊息 1個topic 主題 只有唯一的retain 保留 訊息,broker會儲存每個topic的最後一條retain訊息。每個client訂閱topic後會立即讀取到retain訊息,不必要等待傳送。訂閱topic時可以使用萬用字元,就會收到匹配的每個topic的retain訊息。如果...

android訊息推送 mqtt協議

對與訊息推送是什麼個概念,在此就不贅述啦。google自帶的c2md服務,可以幫助我們實現該功能,可以該伺服器在國外,所以鑑於網速等各種條件限制,我們也沒法實現。為解決該問題,在讀了大量的部落格等質料之後,終於見到啦陽光。第三個是由ibm提供的mqtt協議的實現,就相當於乙個 開啟1883埠,在se...