2016-07-07 147 views
0

我使用下面的代碼連接到MQTT服務器Android MQTT,客戶端狀態如何知道setWill正在工作?

MqttConnectOptions options = new MqttConnectOptions(); 
options.setCleanSession(true); 
options.setKeepAliveInterval(Constants.CLOUD_KEEP_CONN_ALIVE); 
byte[] payload = String.valueOf(0).getBytes((Charset.defaultCharset()); 
options.setWill("willTopic", payload, 0, true); 
mAndroidAsyncClient.connect(options, this); 

一旦連接上我得到一個回調。現在我的問題是如何在服務器中調試,該setWill正在使用mosquitto_sub

我正在使用setWill來了解客戶端的存在。

要確認setWil正在工作,我想通過訂閱willtopic並獲取日誌來從服務器進行調試。

我試過連接和斷開很多次,但有消息發送過話題。我在服務器上使用

命令是

mosquitto_sub -t appTopic --will-topic willTopic 

這將是有益的,如果任何人共享命令或方法來調試MQTT setWill。

我試過參考How to Find Connected MQTT Client Details。但它並沒有爲我鍛鍊。

回答

0

測試LWT(Last Will & Testement)消息發送的唯一真正方法是讓代理髮送它。

要做到這一點,你將不得不造成客戶端的乾淨關閉,因爲這是在Android上最簡單的方法是在模擬器中運行應用程序,讓它連接然後殺死模擬器(你必須做的這是因爲上次我tried讓模擬器禁用所有網絡活動,我發現它只是發送網絡關閉廣播,但離開了網絡)。一旦保活期到期,經紀人發現客戶已經離開,它應該發佈LWT消息,您應該可以通過mosquitto_sub來看到這一點。

可能有方法可以查詢給定LWT消息的代理,但這完全取決於您使用的代理。我不知道有哪些經紀商可以輕鬆實現,但在支持該接口的經紀商的'$ SYS /#'主題樹下可能有些東西。

編輯:

而且使用mosquitto_sub當你應該只使用-t--will-topic--will-topicmosquitto_sub發佈它自己的LWT的主題,如果它已斷開連接。因爲您可以根據需要有儘可能多的-t選項,-v將打印郵件正文之前的主題名稱,以便您可以告訴他們分開

mosquitto_sub -v -t appTopic -t willTopic