MQTT连接相关问题

本文介绍MQTT连接掉线的排查方法。

如何在物联网平台设置设备心跳?

MQTT保活心跳的详细说明,请参见MQTT保活

物联网平台能否自行配置MQTT连接参数?

可以。MQTT连接通信的参数说明,请参见MQTT-TLS连接通信MQTT-WebSocket连接通信基于IPv6的MQTT连接通信

为什么设备一直上下线?

如果发现设备反复上下线,很有可能同一个设备证书用于多个设备连接认证。例如有两个设备,但使用了同一个设备证书。设备1先上线,设备2后上线。设备2连接认证时,系统会把设备1的连接断掉,而设备1又会重连,再将设备2断掉,如此循环。可以通过日志服务,根据设备信息查询日志情况。

单设备每分钟最大连接请求次数为5次,超出5次的连接请求将被拒绝。

如何判断设备掉线的原因?

如果不是设备主动断开连接,可以通过设备日志来判断原因。

如果出现类似Keepalive timeout after xx sec这样的日志,说明设备没有及时发送心跳包给物联网平台。服务器容忍5秒的延迟,如果还是没有收到ping包,服务器会关闭与设备的连接。

关于MQTT保活说明,请参见MQTT保活

如何检查网络问题?

如果您的本地环境无法连接服务器,请检查下本地网络情况。常用的网络检查命令:

  • ping ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:用于检测是否可以连接物联网平台服务器。

  • telnet ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com 1883:用于检测1883端口连接情况。

如果以上的检测结果显示没有问题,但是接入仍然不成功,请检查本地防火墙策略。建议可通过traceroute、tcpdump分析网络具体原因。

另外,除了MQTT规范标准默认的1883端口,您也可以尝试使用443端口去连接MQTT server。在防火墙默认设置的情况下,443端口被拦截的机率小很多。