MessageID returns 在所有 mqtt 中为零

MessageID returns zero in paho mqtt

我正在使用当前版本的 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 returns 任何时候消息到达或方法 messageArrived 被调用。

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

我不熟悉 Paho,但假设 "message id" 与 MQTT spec 中谈论的 "packet identifier" 相同:它不是您所有的唯一编号序列消息。它只有两个字节(所以它可能是同一件事,因为 Paho 使用的是能够容纳两个无符号字节的最小原始类型)。它的目的是在 QoS>0 的多阶段握手期间匹配正在传输的多个消息。所以我的理论是:无论您附加到什么 MQTT 代理,它都会稀疏地使用这个有限的序列。仅当有多个消息正在传输时,它才可能显示非零数字。如果我正确阅读 Paho javadoc,您应该能够简单地进行测试:继续发送消息但保持从 messageArrived.

返回

试一试,告诉我。我在猜测一点点。如果我进一步推测,您想使用此消息 ID 作为所有消息的 application-level 唯一标识符:这不是正确的工具。您必须在应用程序级别提供自己的序列。