Управление переподключениями к серверу MQTT - PullRequest
0 голосов
/ 18 февраля 2020

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

...