等待來自服務器的響應時超時 (32000) at org.eclipse.paho.client.mqttv3.internal
try {
// host為主機名,test為clientid即連接MQTT的客戶端ID,一般以客戶端唯一標識符表示,MemoryPersistence設置clientid的保存形式,默認為以內存保存
this.client = new MqttClient(HOST, clientid, new MemoryPersistence());
// MQTT的連接設置
MqttConnectOptions options = new MqttConnectOptions();
// 設置是否清空session,這里如果設置為false表示服務器會保留客戶端的連接記錄,這里設置為true表示每次連接到服務器都以新的身份連接
options.setCleanSession(true);
// 設置連接的用戶名
options.setUserName(userName);
// 設置連接的密碼
options.setPassword(passWord.toCharArray());
// 設置超時時間 單位為秒
options.setConnectionTimeout(10);
// 設置會話心跳時間 單位為秒 服務器會每隔1.5*20秒的時間向客戶端發送個消息判斷客戶端是否在線,但這個方法並沒有重連的機制
options.setKeepAliveInterval(20);
// 設置回調函數
client.setCallback(new MqttCallback() {
public void connectionLost(Throwable cause) {
System.out.println("connectionLost");
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println(message);
handleMessage(topic,message);
}
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------"+ token.isComplete());
}
});
client.connect(options);
//訂閱消息
System.out.println(topic);
client.subscribe(topic);
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
定位問題:可能是因為網絡或者並發導致連接不上,通過paho客戶端也發現連接服務器比較慢
解決方法:
先增加超時時間,后查mqtt服務器並發,網絡狀況
// 設置超時時間 單位為秒
options.setConnectionTimeout(1000);
// 設置會話心跳時間 單位為秒 服務器會每隔1.5*20秒的時間向客戶端發送個消息判斷客戶端是否在線,但這個方法並沒有重連的機制
options.setKeepAliveInterval(2000);
打開EMQX服務器的dashboard
默認賬戶名---密碼:admin---public

最后重裝EMQX服務器解決 可能是緩存問題
