我正在使用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) {
}
}
}
答案 0 :(得分:0)
在connOpt.setConnectionTimeout(2000);
行之后,尝试添加
connOpt.setAutomaticReconnect(true);
如果设置为true,则在连接断开的情况下,客户端将尝试重新连接到服务器。最初将等待1秒钟,然后再尝试重新连接,对于每次失败的重新连接尝试,延迟都会加倍,直到2分钟为止,此时延迟将保持2分钟。