MQTT客户端重连主要有两种方法
第一种:自动重连
设置org.eclipse.paho.client.mqttv3.MqttConnectOptions#setAutomaticReconnect
为true
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
然后callback实现org.eclipse.paho.client.mqttv3.MqttCallbackExtended
,这个接口提供了一个连接完成的回调方法,连接完成后做一些操作,如订阅主题。
public MyMqttCallback implements MqttCallbackExtended {
/**
* 连接成功会进入到这里
* @param reconnect
* @param serverURI
*/
@Override
public void connectComplete(boolean reconnect, String serverURI) {
// 可以做订阅主题
}
}
这样当断开连接后,MqttClient内部会自动进行重连,每次连接成功后都会回调connectComplete()方法。
第二种:自定义重连
如果不指定setAutomaticReconnect为true
可以在public void connectionLost(Throwable throwable)
中处理重连
@Override
public void connectionLost(Throwable throwable) {
System.out.println("失去连接:" + throwable.getMessage());
int times = 1;
while (!client.isConnected()) {
try {
System.out.println("重新连接, 第" + (times++) + "次");
client.reconnect();
System.out.println("重连成功");
break;
} catch (MqttException e) {
e.printStackTrace();
System.out.println("重连失败, msg:" + e.getMessage());
}
// 每隔10秒重试一次
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 执行到这里,说明连接成功,重新订阅主题
xxx
}
对此笔者对MqttClient做了一个简单封装,可前往查看