等待來自服務器的響應時超時 (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服務器解決 可能是緩存問題