Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Paho驱动程序重新连接到MQTT_Java_Mqtt_Paho - Fatal编程技术网

Java 如何使用Paho驱动程序重新连接到MQTT

Java 如何使用Paho驱动程序重新连接到MQTT,java,mqtt,paho,Java,Mqtt,Paho,我正在为我的一些应用程序使用MQTT客户机Java库,我认为我正在以错误的方式重新连接到代理。目前,我有一个类处理MQTT操作,如连接、断开连接、发布和订阅 public class MqttConnection { private static final String BROKER_ADDRESS = Preferences.getProperty("mqtt-address"); private static final String BROKER_PORT = Pref

我正在为我的一些应用程序使用MQTT客户机Java库,我认为我正在以错误的方式重新连接到代理。目前,我有一个类处理MQTT操作,如连接、断开连接、发布和订阅

public class MqttConnection {

    private static final String BROKER_ADDRESS = Preferences.getProperty("mqtt-address");
    private static final String BROKER_PORT = Preferences.getProperty("mqtt-port");
    private static final String BROKER_URI = "tcp://" + BROKER_ADDRESS + ":" + BROKER_PORT;

    private static final String VHOST = Preferences.getProperty("mqtt-vhost");
    private static final String USERNAME = Preferences.getProperty("mqtt-username");
    private static final String PASSWORD = Preferences.getProperty("mqtt-password");

    private static MqttClient client;

    private static final Logger logger = LogManager.getLogger(MqttConnection.class);

    static {
        try {
            client = new MqttClient(BROKER_URI, MqttClient.generateClientId());
        } catch (MqttException ex) {
            logger.fatal(ex);
        }
        client.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable thrwbl) {
                logger.info("MQTT : Perte de connexion...");
                MqttConnection.start();
            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                // CODE HERE
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken imdt) { }
        });
    }

    public static void start() {
        connect();
    }

    private static void connect() {
        if (!client.isConnected()) {
            try {
                if (Preferences.getProperty("mqtt-isauth").equalsIgnoreCase("true")) {
                    MqttConnectOptions options = new MqttConnectOptions();
                    String username = (VHOST.equals("")) ? USERNAME : VHOST + ":" + USERNAME;
                    options.setUserName(username);
                    options.setPassword(PASSWORD.toCharArray());
                    client.connect(options);
                } else {
                    client.connect();
                }
                logger.info("MQTT : Connecté au broker.");
            } catch (MqttException ex) {
                logger.fatal(ex);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    logger.fatal(e);
                }
                connect();
            }
        }
    }

    private static void subscribe() {
        if (client.isConnected()) {
            try {
                client.subscribe("+/SWI1");
            } catch (MqttException e) {
                logger.fatal(e);
            }
        }
    }
}
但是,当它尝试重新连接时,似乎会打开许多连接,并使代理程序出现错误。
重新连接到MQTT代理的最佳方式是什么?

您可以使用
MqttConnectOptions.setAutomaticReconnect(true)
启用自动重新连接。

您可以使用
MqttConnectOptions.setAutomaticReconnect(true)
启用自动重新连接