2016-08-17 68 views
1

我在嵌入式應用程序中使用MQTT。我已經廣泛地閱讀了文檔,並且瞭解瞭如何在MQTT中實現QoS功能以及每個值的含義。MQTT QoS降級

如已知的,MQTT確實的QoS降級,這意味着消息將與發送者和接收者之間的最低QoS值來遞送。這是可以理解的,並且對於發送和接收之間的大多數QoS協議來說這是有意義的。

但是我遇到了特定情況的問題。當客戶訂購QoS 2時,如果消息以QoS 1發佈,會發生什麼情況?

該消息將被至少一次輸送到代理,這意味着它可以被遞送一次以上。另一方面,訂閱客戶期望它保證只接收一次消息,事實並非如此。

如何解決這個嚴重問題?基本上我不能相信QoS 2設置。

(注意,通常這不會是一個問題,因爲我可以只發布帶有QoS 2消息。然而這將成爲當發佈客戶是你無法控制的問題,而且也不能保證它的QoS他們會使用。)

回答

2

正如你已經指出的那樣,當原始發送者將消息發送到代理具有QoS 1,該消息可以在代理處,這意味着代理可以傳送該消息到質量(QoS 2到達多次)用戶也多次。由於第一個QoS 1消息和第二個QoS 1消息之間的時間可以是非常長的(如果原始發送者在原始發送之後離線,並且因此在稍後的時間點發生重新遞送),則一次保證在經紀人方面很難保證消息的訂閱者。

在本質上,請確保您的客戶機可以處理重複的,如果你不能確保你只收到的QoS 2級的消息。你可以例如在應用程序有效負載中使用唯一標識符以確保消息在業務級別上不重複。

+0

所以基本上在亂我的控制發佈客戶我應該總是假設的QoS 0或QoS 1,但從來沒有QoS2,對不對? –