等待來自服務器的響應時超時 (32000) at org.eclipse.paho.client.mqttv3.interna


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM