簡體   English   中英

發布具有mqtt QoS 2的消息時,消息會丟失嗎?

[英]When publishing message with mqtt QoS 2, can it be lost?

我正在嘗試使用MQTT-Client Framework實現MQTT客戶 我想確保我嘗試發布的每條消息都會到達代理。 我無法確切知道QOS2的含義:它指出一條消息將只發送一次。 這是否意味着當連接斷開時,它將嘗試在重新連接后自動重新傳輸消息? 還是應該由應用處理?

同樣在此庫中,默認情況下自動重新連接嗎? 還是需要檢查connectionLost是否發生,然后嘗試重新連接?

MQTT QoS級別是對消息傳遞到接收方的保證,而不是對發送方發送/重新發送消息的頻率的保證。 請參閱MQTT規范中QoS部分以及MQTT QoS概述

使用MQTT QoS2發布的消息意味着將只發送一次 消息可以發送一次以上,以實現一次准確的傳遞保證。

使用PUBLISH / PUBREC握手可以達到MQTT的至少一次交付方面。 如果發布者沒有收到確認其已發布消息的PUBREC數據包,則它將繼續重新發送帶有DUP標志的發布消息。

使用附加的PUBREL / PUBCOMP握手,可以實現QoS2的一次准確交付。 接收者可以選擇轉發消息,並在兩個不同的點丟棄重復的消息。

這是否意味着當連接斷開時,它將嘗試在重新連接后自動重新傳輸消息? 還是應該由應用處理?

MQTT規范涵蓋了消息傳遞重試

當客戶端在CleanSession設置為0的情況下重新連接時,客戶端和服務器都必須使用其原始數據包標識符重新發送任何未確認的PUBLISH數據包(其中QoS> 0)和PUBREL數據包。 這是唯一需要重新發送郵件的客戶端或服務器的情況。

因此,如果您的客戶端遵循規范,並且您正在使用持久性會話(CleanSession = 0),則將重新傳輸消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM