源码解析博客推荐
https://juejin.im/post/5cd66c4af265da037516bec3
1.遇到的问题
1.1同一设备,多次创建mqtt client
在最开始的代码实现中,发现同一个设备有两个client。因为我在client的定义上有增加timestamp作为参数的一部分,而timestamp在获取的时候是根据当前时间动态获取的,这导致我在service多次启动中,创建了多个client。
在mqtt的client中,一个clientID可以创建一个mqtt的连接,如果出现了两个以上,那么说明一定是clientID不同导致的。
1.2断线重连导致陷入死循环
最开始设计断线重连的时候,client调用的callback是:mqttcallback,这个回调需要手动处理断线重连状态。
//订阅主题的回调【setAutomaticReconnect设置false调用该回调】
private MqttCallback mqttCallback = new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
LogUtils.d("mqtt", "mqttCallback>>连接中断");
//doClientConnect();//再次连接,这种写法会导致异常:不停的断线重连
// try {
// Thread.sleep(30000);
// reConnect();
// }catch (InterruptedException e){
//

本文总结了MQTT开发中遇到的问题,包括同一设备创建多次client、断线重连死循环、关闭客户端导致内存泄漏等。解决方案包括使用MqttCallbackExtended进行自动重连、避免手动重连操作以及在应用退出时不关闭MQTT服务以防止内存泄漏。
最低0.47元/天 解锁文章
1080

被折叠的 条评论
为什么被折叠?



