Я разрабатываю приложение с org.eclipse.paho.client.mqttv3 версии 1.2.0 на Java.Для идентификации сообщения, которое отправляется брокеру mqtt через идентификатор сообщения iMqttDeliveryToken.
Шаг 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 Я получаю сообщение ID.Это я использую, чтобы сохранить и идентифицировать сообщение в базе данных.
Шаг 3 - подождите, пока не будет вызван обратный вызов deliveryComplete:
Это предлагает мне тот же IMqttDeliveryToken, где я снова получаю messageId.
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
// delete the database entry via messageId from database
}
Проблема в том, что Шаг 3 может быть быстрее, чем Шаг 2.Поэтому обратный вызов вызывается до того, как моя запись будет сохранена в базе данных.Мне нужно знать идентификатор сообщения перед отправкой сообщения, чтобы сохранить его, прежде чем можно будет вызвать обратный вызов.Я не могу сгенерировать messageId самостоятельно и установить его так:
mqttMessage.setId(555);
MQTT генерирует собственный messageId.Итак, мои вопросы:
- Можно ли установить собственный идентификатор сообщения?
- Можно ли получить идентификатор сообщения, сгенерированный клиентом mqtt до публикации?