【问题标题】:Android MQTT , Client presence How to know setWill is working?Android MQTT,客户端存在如何知道 setWill 是否有效?
【发布时间】:2016-07-07 11:52:44
【问题描述】:

我正在使用以下代码连接到 MQTT 服务器

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 并获取日志来从服务器进行调试。

我多次尝试连接和断开连接,但有消息通过 will topic 发送。

我在服务器上使用的命令是

mosquitto_sub -t appTopic --will-topic willTopic

如果有人分享调试 Mqtt setWill 的命令或方法,将会很有帮助。

我尝试参考 How to Find Connected MQTT Client Details 。但它对我没有锻炼。

【问题讨论】:

    标签: android client mqtt


    【解决方案1】:

    测试 LWT(Last Will & Testement)消息是否被发送的唯一真正方法是让代理发送它。

    要做到这一点,你将不得不导致客户端的非干净关闭,鉴于这是在 android 上,最简单的方法是在模拟器中运行应用程序,让它连接然后终止模拟器(你必须这样做因为上次我tried 让模拟器禁用所有网络活动,我发现它只是发送了 Network Down 广播但让网络保持正常运行)。一旦保活期到期并且代理注意到客户端已经离开,它应该发布 LWT 消息,您应该能够通过 mosquitto_sub 看到这一点。

    可能有一些方法可以查询代理以获取给定的 LWT 消息,但这完全取决于您使用的代理。我不知道有任何代理可以让这变得简单,但是在支持该接口的代理上的“$SYS/#”主题树下可能有一些东西。

    编辑:

    此外,当使用mosquitto_sub 时,您应该只使用-t 而不是--will-topic--will-topicmosquitto_sub 在断开连接时发布它自己的 LWT 的主题。您可以根据需要拥有任意多个-t 选项,-v 将在消息正文之前打印主题名称,以便您将它们区分开来

    mosquitto_sub -v -t appTopic -t willTopic
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多