2017-01-23 149 views
1

我正在爲我的android項目實現Paho MQTT Java客戶端。它基本上是一個即時消息系統。發佈和訂閱實施對我來說效果很好,但我留下了一個問題。訂閱的客戶端能夠在發佈時接收消息,但是系統檢查客戶端(訂閱者)接收/發送消息的能力有點難以實現,我認爲這是因爲MQTT沒有支持。如何檢查代理何時向客戶端發送消息(訂戶)

有沒有人有一個想法,如何以不同的方式實現這個邏輯?

回答

1

按在MQTT你可以設置它具有方法deliveryComplete(IMqttDeliveryToken token)的MqttCallback現在按它說這個回調方法將被稱爲

時傳遞的消息已完成

文檔的文檔,並已收到所有確認。

爲了保證交貨設置QoS(服務質量)爲2

如果您還有關於這個方法,您可以使用另一種方法表示懷疑,你可以在客戶端預計acknowledgement消息郵件的傳遞,但這只是mqtt的另一個開銷,並且取決於您的要求是否使用此信息。

你可以探索更多關於他們的github它也有示例代碼來了解更多關於Mqtt的工作原理。

我希望這有助於

+1

當代理成功發佈消息時調用'deliveryComplete(IMqttDeliveryToken token)',當客戶端收到您的消息時不會調用此消息。 – George

+0

@George Yeah可能是這種情況,因爲你的問題涉及到訂戶端消息的確認,所以我建議你有一個休息API,它可以將每個消息標記爲「已交付」,這應該可以達到目的。如果你想保證消息的傳送,你可以將QoS設置爲2,並將cleanSession標誌設置爲false。 –

2

MQTT協議沒有內置的端到端傳遞通知。沒有辦法知道一個主題有多少用戶,它可能在0到很多之間。

如果您需要端到端傳遞通知,那麼您需要將其構建到應用程序中,方法是在每個消息的有效內容中添加一個唯一標識,然後從該標識中發佈另一個消息(可能位於單獨的主題上)客戶訂閱了原始主題。消息還應該在QOS 2上發佈和訂閱,以確保它們僅交付一次。

+0

_消息也應該在QOS 2_上發佈和訂閱「@hardillb不是QoS 1足夠何時實施唯一的有效負載ID? –

+0

QOS 2節省了在雙重交付情況下必須跟蹤消息 – hardillb

+0

我知道QoS2的功能。在聊天應用程序的情況下,OP將不得不跟蹤消息id,以正確排序無序或延遲交付。所以從技術上講,它可以在QoS1上實現,我猜。 –

相關問題