MQTT повторно подключается на неопределенный срок, несмотря на то, что ему удается подключиться

#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 будет работать хорошо, несмотря на то, что вы установили идентификатор клиента… Спасибо