4

Android で MQTT を使用して、ActiveMQ サーバーと通信しています。この例を使用して、Android mqtt クライアントを実装しました: 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 を構成できますか?

4

1 に答える 1

2

そのため、activemq.xml で次の行を構成して、ActiveMQ キープアライブを変更することになりました。

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

そして、MQTT android クライアントのキープアライブを次のように構成します。

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

クライアントのキープアライブはサーバーよりも短くする必要があると読んだので、5秒と10秒を選択しました。これがリアルタイム アプリケーションの適切な時間であることを願っています。

于 2013-09-30T10:16:22.807 に答える