看过入门篇的小伙伴是不是想着一个问题,就是连接失败的时候咋们还需要做重连,不然就无法保证服务器的高可用问题.
其实喜欢研究代码的同学呢,会去看一下mqtt的源码.其实connnect的方法其实有多个重载方法.以下代码是我们今天要看的.
public class MqttAsyncClient implements IMqttAsyncClient {
......
public IMqttToken connect(MqttConnectOptions options) throws MqttException, MqttSecurityException {
return this.connect(options, (Object)null, (IMqttActionListener)null);
}
......
}
细心的同学可能发现了,connect的第三个参数里边有个参数是IMqttActionListener
这一个方法呢是监听连接状态的,在connect时会触发,所以我们可以实现该类
public interface IMqttActionListener {
void onSuccess(IMqttToken var1);
void onFailure(IMqttToken var1, Throwable var2);
}
它有一个onSuccess和onFailure方法,
onSuccess方法在连接成功时触发,onFailure会在连接失败时触发.
我们的话可以在里边写自己想要的内容.例如成功时候订阅,还有失败时候的重连
private IMqttActionListener iMqttActionListener = new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
log.info("success to connnect.");
//这里的topics可以直接在imqttToken获取或者,和qos一样在配置获取
client.subscribe(topics,qos);
}
@Override
public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
log.error("fail to connnect,try again");
int count = 2;
do {
try {
count--;
if (count<0){
WarmingUtil.getwarming("2", "mqtt连接出现问题");
break;
}
Thread.sleep(1000);
client.connect(conOpt,null,iMqttActionListener);
} catch (MqttException e) {
e.printStackTrace();
log.error("mqtt重连失败");
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (!client.isConnected());
}
};
以上方法连接的方法get到了吗,本文章到此结束,有什么建议的可以给我留言.
网友评论