2016-07-07 149 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