问题

最近开发项目需要用到MQTT,开发完成测试的时候发现经常连接断开。

由于没有报错信息,在万能的百度搜索看看有没有遇到同样问题的网友,结果发现可能是客户端ID的问题,我每次启动都是一样的客户端ID,之前的客户端ID在MQTT服务器上还保存着没有清理掉,再次启动客户端就连接不上。

解决方法

使用随机数生存客户端ID,重新启动,问题得到解决,不会一直连接断开。

项目运行了几天发现又出现一个新问题,长时间没有操作连接还是会断开,无法发送和接收消息。

在网上查阅MQTT相关文章,详细了解MQTT,发现MQTT有个自动重连功能。有两种方式可以实现自动重连。

1、MQTT连接配置类MqttConnectOption类可以设置自动重连。如下图:

MQTT断开重连_自定义

设置自动重连后,callback要实现MqttCallbackExtended,这个接口里有个连接完成的回调方法connectComplete(boolean reconnect,String serverURI),连接完成后可以做订阅主题。如下图:

MQTT断开重连_大数据_02

 

2、自定义重连

如果MQTT连接配置类MqttConnectOption类没有配置自动重连,还可以做自定义重连。MqttCallback接口里有个connectionLost(Throwable arg0)接口,在这个接口的实现方法里可以自定义重连。如下图:

MQTT断开重连_大数据_03

总结

以上就是关于MQTT连接断开以及重连的一些问题,希望能给大家带来帮助。