我正在使用当前版本的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方法。
请问有人对如何解决这个问题有任何想法吗?
答案 0 :(得分:2)
我不熟悉Paho,但假设“消息ID”与MQTT spec中讨论的“数据包标识符”相同:它不是所有消息的唯一编号序列。它只是两个字节(所以它可能是相同的,因为Paho使用能够保存两个字节无符号的最小基元类型)。这意味着在QoS> 0的多阶段握手期间匹配飞行中的多个消息。所以我的理论是这样的:无论你附加什么MQTT经纪人,它都会稀疏地使用这个有限的序列。只有在飞行中有多条消息时,它才会显示非零数字。你应该能够简单地测试一下,如果我正确地阅读Paho javadoc:继续发送消息但保持从messageArrived
返回。
尝试一下,让我知道。我猜测了一下。如果我推测更多,您希望将此消息ID用作所有消息的应用程序级唯一标识符:这不是正确的工具。您必须在应用程序级别提供自己的序列。