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做了一个简单封装,可

经验分享 程序员 微信小程序 职场和发展