Java 中使用 MQTT,连接丢失重连后如何订阅主题

在使用 MQTT 协议时,当连接丢失重连后,需要重新订阅之前的主题。这是因为 MQTT 是一个基于发布/订阅模式的协议,连接丢失后,订阅信息会被服务器清除,需要重新订阅。

以下是一个使用 Eclipse Paho MQTT 客户端库的示例代码,展示如何在连接丢失后重新订阅之前的主题:

import org.eclipse.paho.client.mqttv3.*;

public class MQTTSubscriber { private static final String BROKER = "tcp://mqtt.eclipse.org:1883"; private static final String CLIENT_ID = "mqtt-subscriber"; private static final String TOPIC = "your/topic";

public static void main(String[] args) {
    try {
        MqttClient client = new MqttClient(BROKER, CLIENT_ID);
        MqttConnectOptions options = new MqttConnectOptions();
        options.setCleanSession(true);
        
        client.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable throwable) {
                System.out.println("Connection lost! Reconnecting...");
                try {
                    client.connect(options);
                    client.subscribe(TOPIC);
                    System.out.println("Reconnected and subscribed to topic: " + TOPIC);
                } catch (MqttException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                System.out.println("Received message: " + new String(message.getPayload()));
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {

            }
        });

        client.connect(options);
        client.subscribe(TOPIC);
        System.out.println("Connected and subscribed to topic: " + TOPIC);

    } catch (MqttException e) {
        e.printStackTrace();
    }
}

}

在上述代码中,当连接丢失时,connectionLost 方法会被调用。在该方法中,我们重新连接和订阅之前的主题。</

Java MQTT 连接丢失重连后订阅主题:完整示例代码和解析

原文地址: http://www.cveoy.top/t/topic/pYDp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录