#java #android #persistence #mqtt #paho
Вопрос:
Я пытаюсь отправлять сообщения MQTT с Android. Для этого я использую MqttAndroidClient. Сообщения не должны быть потеряны в случае потери соединения, поэтому я хотел использовать MqttDefaultFilePersistence. в проекте были сделаны следующие настройки:
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setAutomaticReconnect(true);
mqttConnectOptions.setCleanSession(false);
mqttConnectOptions.setMaxInflight(600);
MqttDefaultFilePersistence dataStore = new MqttDefaultFilePersistence(getExternalStorageDirectory().getAbsolutePath() "/Download/");
try {
dataStore.open(clientID,address);
}catch (Exception ex){
Log.e("MQTT", "Data Store: " ex.toString());
}
client = new MqttAndroidClient(context, address, clientID, dataStore);
MqttMessage message = new MqttMessage();
message.setPayload(json.toString().getBytes());
message.setQos(2);
client.publish(sendTopic, message);
Конечно, в AndroidManifest.xml также был адаптирован:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Теперь проблема: пока установлено сетевое подключение, все работает как обычно. Если сетевое подключение прервано, я получаю следующее сообщение о логической ошибке из какого-либо места:
«I/MqttConnection: Клиент не подключен, поэтому не отправляет сообщение»
Вызов функции client.publish(sendTopic, сообщение); все еще вызывается. Однако, вопреки моим ожиданиям, по пути /Загрузить/файл не создается. Время от времени там появляется папка, но она всегда остается пустой.
Если установлено новое соединение, передаются только новые сообщения. Все промежуточные сообщения теряются.
Есть идеи, что я забыл ?
Комментарии:
1. возможно ли, что сохраняемость ограничена полетными сообщениями, и поэтому нет возможности сохранить сохраняемость сообщений через библиотеку в случае потери сетевого подключения?