#java #android #mqtt
#java #Android #mqtt
Вопрос:
Я использую эту библиотеку:
https://github.com/fusesource/mqtt-client
С помощью этих опций:
MQTT mqtt = new MQTT();
mqtt.setClientId(deviceId() "-device");
mqtt.setHost(getResources().getString(R.string.jms_uri));
mqtt.setUserName(getResources().getString(R.string.jms_user));
mqtt.setPassword(getResources().getString(R.string.jms_password));
mqtt.setReconnectDelay(10000);
mqtt.setReconnectDelayMax(60000);
connection = mqtt.futureConnection();
connection.connect().await(5, TimeUnit.SECONDS);
И иногда (я не могу воспроизвести это) кажется, что он теряет соединение и начинает переподключаться «безумно». Согласно JMS, ему удается подключаться каждый раз, но, я не знаю почему, он продолжает повторно подключаться (закрывая и запуская соединение). Единственное, что я могу сделать, когда это произойдет, это остановить приложение. В то же время повторное подключение к JMS не приносит результатов, поскольку оно не может получить какое-либо сообщение.
Он начинает повторно подключаться все время, не дожидаясь мс, которые я установил для задержки повторного подключения.
Есть предложения?
Спасибо
Ответ №1:
Скорее всего, это связано с тем, что у вас есть 2 клиента, пытающихся подключиться с одним и тем же идентификатором клиента. Идентификатор клиента должен быть уникальным, когда второй клиент подключается с тем же идентификатором, брокер отключит первый, который немедленно попытается повторно подключиться, что запускает второго клиента, и затем это продолжается в цикле.
Если вы посмотрите на журналы брокера, это должно быть действительно легко определить, что это так.
Комментарии:
1. Я проверю это. Я думал, что причина, которую вы говорите, является наиболее логичной. Однако я думал, что повторное подключение mqtt будет работать хорошо, несмотря на то, что вы установили идентификатор клиента… Спасибо