MQTT客户端连接重新连接到代理后无法工作

时间:2018-07-05 03:54:24

标签: java mqtt broker

我是MQTT的新手。当客户端断开连接时,我尝试重新连接到代理。这是我的功能:

@Override
public void connectionLost(Throwable cause) {
    // TODO Auto-generated method stub
    reconnectStatus = 0;

    executor.scheduleAtFixedRate(reconnectRunnable, 0, 5, TimeUnit.SECONDS); // reconnect every 5s

    System.out.println(cause);
}

这是重新连接的功能:

// reconnect to the broker
Runnable reconnectRunnable = new Runnable() {
    public void run() {
       if(reconnectStatus == 1) {
           System.out.println("Stop runnable!");
           executor.shutdown();
           return;
       } else {
           init();
       }
    }
};

在代理重新启动时的第一时间工作正常。但是,此connectionLost()触发器在我第二次重新启动代理时不起作用。 我该如何解决?
非常感谢。

2 个答案:

答案 0 :(得分:1)

如果您使用this mqtt client

,则不需要额外的代码来自动重新连接

您可以在创建MqttConnectOptions时在MqttClient中指定重新连接和清理会话选项。

示例代码:

public void initClinet(){
    MqttClient client=new MqttClient("server address", MqttClient.generateClientId());
    client.setCallback(new MyListener());
    MqttConnectOptions options = new MqttConnectOptions();
    options.setAutomaticReconnect(true);
    options.setCleanSession(true);
    options.setUserName("username");
    options.setPassword("password".toCharArray());
    options.setKeepAliveInterval(10);
    options.setCleanSession(false);
    client.connect(options);
    client.subscribe("channelname");    
}

答案 1 :(得分:0)

最有效的方法是使用Mqttclient.reconnect()