我正在使用paq库Classes for Mqtt Connections org.eclipse.paho.client.mqttv3.MqttClient。 (不是MqttAsyncClient)
在我使用
发布的情况下mqttClient.publish(uid +“/ p”,new MqttMessage(payload.toString()。getBytes()));
此方法为我完成任务,但不返回任何内容,因此我无法检查发布和pubAck之间的延迟。
为了获得延迟,我使用以下代码而不是直接调用mqttClient的发布函数。
public long publish(JsonObject payload , String uid, int qos) {
try {
MqttTopic topic = mqttClient.getTopic(uid + "/p");
MqttMessage message = new MqttMessage(payload.toString().getBytes());
message.setQos(qos);
message.setRetained(true);
long publishTime = System.currentTimeMillis();
MqttDeliveryToken token = topic.publish(message);
token.waitForCompletion(10000);
long pubCompleted = System.currentTimeMillis();
if (token.getResponse() != null && token.getResponse() instanceof MqttPubAck) {
return pubCompleted-publishTime;
}
return -1;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
这可以完成工作,但我不确定这是否是正确的方法。如果还有其他方法可以告诉我。