Как буферизировать сообщения клиента MQTT с помощью функции MqttDefaultFilePersistence() в случае потери соединения?

#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. возможно ли, что сохраняемость ограничена полетными сообщениями, и поэтому нет возможности сохранить сохраняемость сообщений через библиотеку в случае потери сетевого подключения?