MQTT連接相關問題
本文介紹MQTT連接掉線的排查方法。
如何在物聯(lián)網(wǎng)平臺設置設備心跳?
物聯(lián)網(wǎng)平臺提供多種語言的Link SDK,每個SDK設置心跳的方式大同小異,具體內容,請參見:
如果您使用開源MQTT實現(xiàn)設備接入,需您在開源MQTT的參數(shù)中自行查找心跳參數(shù)進行配置。
MQTT保活心跳的詳細說明,請參見MQTT保活。
物聯(lián)網(wǎng)平臺能否自行配置MQTT連接參數(shù)?
可以。MQTT連接通信的參數(shù)說明,請參見MQTT-TLS連接通信、MQTT-WebSocket連接通信、基于IPv6的MQTT連接通信。
為什么設備一直上下線?
如果發(fā)現(xiàn)設備反復上下線,很有可能同一個設備證書用于多個設備連接認證。例如有兩個設備,但使用了同一個設備證書。設備1先上線,設備2后上線。設備2連接認證時,系統(tǒng)會把設備1的連接斷掉,而設備1又會重連,再將設備2斷掉,如此循環(huán)。可以通過日志服務,根據(jù)設備信息查詢日志情況。
單設備每分鐘最大連接請求次數(shù)為5次,超出5次的連接請求將被拒絕。
如何判斷設備掉線的原因?
如果不是設備主動斷開連接,可以通過設備日志來判斷原因。
如果出現(xiàn)類似Keepalive timeout after xx sec
這樣的日志,說明設備沒有及時發(fā)送心跳包給物聯(lián)網(wǎng)平臺。服務器容忍5秒的延遲,如果還是沒有收到ping包,服務器會關閉與設備的連接。
關于MQTT保活說明,請參見MQTT保活。
如何檢查網(wǎng)絡問題?
如果您的本地環(huán)境無法連接服務器,請檢查下本地網(wǎng)絡情況。常用的網(wǎng)絡檢查命令:
ping ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com
:用于檢測是否可以連接物聯(lián)網(wǎng)平臺服務器。telnet ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com 1883
:用于檢測1883端口連接情況。
如果以上的檢測結果顯示沒有問題,但是接入仍然不成功,請檢查本地防火墻策略。建議可通過traceroute、tcpdump分析網(wǎng)絡具體原因。
另外,除了MQTT規(guī)范標準默認的1883端口,您也可以嘗試使用443端口去連接MQTT server。在防火墻默認設置的情況下,443端口被攔截的機率小很多。