MQTT 客户端重连(Java paho)
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做了一个简单封装,可