【发布时间】:2019-02-26 11:00:14
【问题描述】:
我使用 Java 中的 org.eclipse.paho.client.mqttv3 版本 1.2.0 开发了一个应用程序。识别通过 iMqttDeliveryToken 的 messageID 发送到 mqtt 代理的消息。
第 1 步 - 发布消息:
ObjectMapper objectMapper = new ObjectMapper();
MqttMessage mqttMessage = new MqttMessage();
mqttMessage.setPayload(objectMapper.writeValueAsString(myObject).getBytes());
mqttMessage.setQos(1);
IMqttDeliveryToken iMqttDeliveryToken = this.client.publish("/myTopic", mqttMessage);
第 2 步 - 将消息保存到数据库中:
从 IMqttDeliveryToken 我得到了 messageID。我用它来保存和识别数据库中的消息。
第 3 步 - 等待调用 deliveryComplete 回调:
这为我提供了相同的 IMqttDeliveryToken,让我再次获得 messageId。
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
// delete the database entry via messageId from database
}
问题在于 Step3 可以比 Step2 更快。所以在我的条目被保存到数据库之前调用回调。我需要在发送消息之前知道 messageId 以保存它,然后才能调用回调。我无法自己生成 messageId 并将其设置为:
mqttMessage.setId(555);
MQTT 生成一个自己的 messageId。所以我的问题:
- 是否可以设置自己的messageId?
- 能否在发布前获取mqtt客户端生成的messageId?
【问题讨论】: