Я подключаюсь к MQTT-серверу, используя MqttAndroidClient
:
doReconnect()
{
.....
mqttAndroidClient.connect(mqttConnectOptions, null,
new IMqttActionListener()
{
@Override
public void onSuccess(IMqttToken asyncActionToken)
{
Timber.tag(Utils.TIMBER_TAG).v( "onSuccess " + MqttHelper.toString(asyncActionToken));
DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
disconnectedBufferOptions.setBufferEnabled(false);
disconnectedBufferOptions.setBufferSize(100);
disconnectedBufferOptions.setPersistBuffer(false);
disconnectedBufferOptions.setDeleteOldestMessages(false);
mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
subscribeToTopic(top);
showMainActivity("Connect OK");
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable e) {
Timber.tag(Utils.TIMBER_TAG).v( "Failed to connect to: " +uri+" "+e.toString());
showMainActivity("Failed while connect "+e.toString());
doReconnect()
}
});
....
}
Работает нормально, когда сервер доступен. Если я закрываю порт, я получаю событие OnFailure
, которое снова вызывает doReconnect. Если теперь я открою порт, я получу два звонка onSuccess
вместо одного, и на сервере MQTT я вижу двух подписанных клиентов. Похоже, предыдущий сеанс все еще пытается восстановить соединение. Почему мне звонят два раза и как этого избежать?