MessageID在paho mqtt中返回零

时间:2017-01-24 16:26:42

标签: android mqtt paho

我正在使用当前版本的Paho MQTT android客户端,(编译org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0),我试图从messageArrived()回调收到的每条消息中获取消息ID。这就是我的做法。

   @Override
        public void messageArrived(String topic, MqttMessage message) throws Exception {
            String plainMessage = new String(message.getPayload());

              int messageID= new Integer(message.getId());
              System.out.println(messageID);

        }

更新 QoS为2

消息到达时消息ID会返回,或者调用messageArrived方法。

请问有人对如何解决这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:2)

我不熟悉Paho,但假设“消息ID”与MQTT spec中讨论的“数据包标识符”相同:它不是所有消息的唯一编号序列。它只是两个字节(所以它可能是相同的,因为Paho使用能够保存两个字节无符号的最小基元类型)。这意味着在QoS> 0的多阶段握手期间匹配飞行中的多个消息。所以我的理论是这样的:无论你附加什么MQTT经纪人,它都会稀疏地使用这个有限的序列。只有在飞行中有多条消息时,它才会显示非零数字。你应该能够简单地测试一下,如果我正确地阅读Paho javadoc:继续发送消息但保持从messageArrived返回。

尝试一下,让我知道。我猜测了一下。如果我推测更多,您希望将此消息ID用作所有消息的应用程序级唯一标识符:这不是正确的工具。您必须在应用程序级别提供自己的序列。