java paho mqtt subscribe无法重新连接

问题描述 投票:0回答:1

我正在使用java paho mqtt。我想始终保持订阅连接。我认为它将是自动连接..但是当mqtt服务器关闭或重启后服务器最终规范化时,客户端(订阅)无法接收任何消息。怎么了?

public class MqttSubscribe {
MqttClient client;
MqttConnectOptions connOpt;


public MqttSubscribe() {

    mqtt_parse = new MqttParser();
    connOpt = new MqttConnectOptions();
    connOpt.setKeepAliveInterval(30);
    connOpt.setCleanSession(true);
    connOpt.setConnectionTimeout(2000);

    mqttSubConnect();

}

MqttCallback callback = new MqttCallback() {

    @Override
    public void connectionLost(Throwable arg0) {

        System.out.println("connect loss");

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mqttSubConnect();
    }


    @Override
    public void deliveryComplete(IMqttDeliveryToken arg0) {
    }

    @Override
    public void messageArrived(String arg0, MqttMessage msg) throws Exception {
        System.out.println(msg.toString());
    }

};

public void mqttSubConnect() {

    try {
        client = new MqttClient(
                SetDeviceSettingsValue.MQTT_BROKER_IP + ":" + SetDeviceSettingsValue.MQTT_BROKER_PORT,
                MqttClient.generateClientId(), new MemoryPersistence());
        client.setCallback(callback);
        client.connect(connOpt);
        client.subscribe(
        MqttTopic.MainTopic+"/"+ MqttJsonHeaderValue.DEVICE_MAC_ADDRESS+"/"+MqttTopic.ControlTopic, 
          MqttQos.MQTT_QOS_2);

    } catch (MqttException e) {
    }
}

}

java mqtt subscribe
1个回答
0
投票

在线connOpt.setConnectionTimeout(2000);尝试添加此

connOpt.setAutomaticReconnect(true);

如果设置为true,则在连接丢失的情况下,客户端将尝试重新连接到服务器。它将在尝试重新连接之前等待1秒,对于每次失败的重新连接尝试,延迟将加倍,直到它在2分钟,此时延迟将保持在2分钟。

© www.soinside.com 2019 - 2024. All rights reserved.