源码解析博客推荐
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.