问题
最近开发项目需要用到MQTT,开发完成测试的时候发现经常连接断开。
由于没有报错信息,在万能的百度搜索看看有没有遇到同样问题的网友,结果发现可能是客户端ID的问题,我每次启动都是一样的客户端ID,之前的客户端ID在MQTT服务器上还保存着没有清理掉,再次启动客户端就连接不上。
解决方法
使用随机数生存客户端ID,重新启动,问题得到解决,不会一直连接断开。
项目运行了几天发现又出现一个新问题,长时间没有操作连接还是会断开,无法发送和接收消息。
在网上查阅MQTT相关文章,详细了解MQTT,发现MQTT有个自动重连功能。有两种方式可以实现自动重连。
1、MQTT连接配置类MqttConnectOption类可以设置自动重连。如下图:
设置自动重连后,callback要实现MqttCallbackExtended,这个接口里有个连接完成的回调方法connectComplete(boolean reconnect,String serverURI),连接完成后可以做订阅主题。如下图:
2、自定义重连
如果MQTT连接配置类MqttConnectOption类没有配置自动重连,还可以做自定义重连。MqttCallback接口里有个connectionLost(Throwable arg0)接口,在这个接口的实现方法里可以自定义重连。如下图:
总结
以上就是关于MQTT连接断开以及重连的一些问题,希望能给大家带来帮助。