java paho mqtt subscribe无法重新连接

时间:2018-02-23 13:10:07

标签: java mqtt subscribe

我正在使用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) {
    }
}

}

1 个答案:

答案 0 :(得分:0)

connOpt.setConnectionTimeout(2000);行之后,尝试添加

connOpt.setAutomaticReconnect(true);

如果设置为true,则在连接断开的情况下,客户端将尝试重新连接到服务器。最初将等待1秒钟,然后再尝试重新连接,对于每次失败的重新连接尝试,延迟都会加倍,直到2分钟为止,此时延迟将保持2分钟。