Клиент Android MQTT не может повторно подключиться к ActiveMQ

Я использую MQTT в Android для связи с сервером ActiveMQ. Я использовал этот пример для реализации клиента mqtt для android: http://dalelane.co.uk/blog/?p=1599. Когда я впервые открываю приложение для Android, оно подключается к ActiveMQ, и все работает. Когда я закрываю приложение, удаляю данные приложения и снова открываю Android, чтобы попытаться повторно подключиться к ActiveMQ, я получаю следующую ошибку в ActiveMQ:

2013-09-29 19:25:50,064 | WARN  | Transport Connection to: tcp://192.168.0.108:54395 failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///192.168.0.108:54395@1883
2013-09-29 20:18:20,417 | WARN  | Failed to add Connection ID:32132151513546-2:5, reason: javax.jms.InvalidClientIDException: Broker: localhost - Client: dbasdfasdfe0b already connected from tcp://192.168.0.108:59211 | org.apache.activemq.broker.TransportConnection | ActiveMQ Transport: tcp:///192.168.0.108:36745@1883

Я предполагаю, что это как-то связано с тем, что вы не отключились от сервера перед попыткой повторного подключения. Может быть, я могу настроить ActiveMQ на удаление неиспользуемого соединения и отключение клиента раньше, когда ActiveMQ определит, что клиент отключился?


person bentzy    schedule 30.09.2013    source источник


Ответы (1)


Итак, я закончил тем, что изменил активный режим ActiveMQ, настроив эту строку в activemq.xml:

<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?transport.defaultKeepAlive=10000"/>

И настройка клиента Android MQTT продолжает работать следующим образом:

keepAliveSeconds = 5;
mqttClient.connect(mqttClientId, true, keepAliveSeconds);

Я читал, что время ожидания клиента должно быть меньше, чем у сервера, поэтому я выбираю 5 и 10 секунд. Я надеюсь, что это подходящее количество времени для приложения реального времени.

person bentzy    schedule 30.09.2013