Android MQTT 客户端无法重新连接到 ActiveMQ

Posted

技术标签:

【中文标题】Android MQTT 客户端无法重新连接到 ActiveMQ【英文标题】:Android MQTT Client unable to reconnect to ActiveMQ 【发布时间】:2013-10-06 02:18:06 【问题描述】:

我在 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 发现客户端断开连接时删除未使用的连接并尽快断开客户端连接?

【问题讨论】:

【参考方案1】:

所以我最终通过在 activemq.xml 中配置这一行来更改 ActiveMQ keep-alive:

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

并像这样配置 MQTT android 客户端保持活动状态:

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

我读到客户端保持活动应该少于服务器,这就是我选择 5 和 10 秒的原因。我希望这是实时应用程序的合适时间。

【讨论】:

以上是关于Android MQTT 客户端无法重新连接到 ActiveMQ的主要内容,如果未能解决你的问题,请参考以下文章

无法从 https 客户端通过 wss 连接到 emqx mqtt 代理

如何使用 MQTT 连接到 wss?

如何通过javascript 使用 MQTT

阅读关于订阅的 MQTT 主题

MQTT paho客户端连接超时错误

我无法在 Lua 上为 ESP8266 订阅 MQTT 代理