2017-08-17 45 views
-2

我發佈的消息的Qos = 2,保留消息= false且清除會話= true。 如果我的訂閱服務器處於脫機狀態,它再次聯機時不會收到Qos 2消息。但發佈者成功獲得PUBREC和PUBCOMP當訂戶未連接時,MQTT與Qos 2發佈

+0

是什麼問題?您使用的是什麼MQTT實施/服務? – Soren

+0

我正在使用配置單元mq websocket。 –

回答

2

這是MQTT協議規範,並且不依賴於您正在使用的代理。 發佈商能夠發佈給經紀商,因此它收到PUBREC和PUBCOMP,因爲發行商向經紀商的交付已完成。 在發行商和訂閱者之間,您有中間經紀人,因此有兩個合約:發行商到經紀商,經紀商到訂閱者。這些合約是相互獨立的。

然後您保留message = false和clean session = true,這意味着如果該主題沒有訂閱者,發佈的消息就會丟失。 考慮幾件事情:

  • 的保留郵件標誌,可用於「儲存」在主題的最新消息,這樣,當用戶訂購,就會收到這樣的消息
  • 乾淨會議標誌是使經紀人保存susbcriptions和所有消息當用戶離線

我不知道您的情況,但:

  • 如果您如果您希望代理爲其所有訂閱保存所有離線訂戶的郵件,請使用clean session = false。如果您希望代理爲所有訂閱保存離線訂戶的所有郵件,請使用clean session = false。回到網上,訂戶也將能夠避免重新訂閱所有主題,因爲它們由經紀人持有。
+0

可以發佈者知道該消息已被訂閱者成功接收? –

+0

不,這不可能,它是關於「brokerd messaging」。您可以在協議之上建立一個基礎設施,以實現類似的目的:這意味着讓訂閱者向主題發佈一種ACK消息,並讓最初的製作人成爲該主題的訂閱者。但是,當然......你總是有同樣的問題,訂閱者不知道發佈者是否已收到ACK;) – ppatierno