mqtt连接地址错误,在中国境内的设备按照中国区地址,中国以外的区域都选择海外区域,详见连接信息。
直接使用了平台账户连接mqtt,MQTT
账户和智读表平台账户是不互通的,需要单独再创建,创建步骤可参考创建MQTT用户和订阅主题。
之前是可以连接的,但现在突然连接不上了。这种情况一个是看MQTT账户密码是否是被删除或者修改了,还有一个是可能接入比较早的客户在接入过程中使用了SSL证书文件,但是证书有效期一年到了之后会定期更新证书,所以导致无法连接,这些用户建议改为的可信任证书的方式,在代码中不直接引入证书文件,这样后期就不必定期更改代码中的证书。具体参考使用MQTT.fx接入和java连接示例。
连接地址分为两个环境,在中国境内的设备按照中国区地址,中国以外的区域都选择海外区域,详见连接信息。
MQTT
数据传输是实时数据传输,不提供数据缓存,只有在设备正发送数据和客户端也正处于连接订阅的时候才能正常接收到数据,不提供数据的缓存,无法在后期收到数据。举个例子,就比如设备13:00点发送的数据,如果在13:30才打开MQTT客户端订阅数据就无法订阅到数据,必须在13:00之前开始订阅才能在13:00刚好收到数据。所以测试阶段可以先开启MQTT订阅程序,然后手动重启设备发送数据,但生产阶段所有MQTT订阅程序都应保持后台长期运行,以免漏接数据。
MQTT的topic设置错误,这个问题详见mqtt topic规则。
订阅的消息类型因为设备通信失败等问题没有上传上来,自然也不会有相关消息。比如订阅160识别数据,但设备图片没传上来或者拍摄的图片系统无法识别生成表计值,那就不会有160类型的数据生成。
这个具体看设备的唤醒设置,设备什么时候唤醒什么时候发送数据。现在有定时唤醒、间隔唤醒、闹钟唤醒三种模式。定时唤醒是设置一个固定时间每天在这个固定时间唤醒。间隔唤醒是每隔多少时间唤醒一次,最近一次唤醒时间时上一次唤醒时间加上时间间隔。闹钟唤醒是定时唤醒的加强版,就是一天可以设置多个固定时间进行唤醒。具体设置请参考唤醒配置 中关于唤醒配置的说明。
这个问题详见 mqtt topic规则
MQTT
账户与密码去哪创建?MQTT
账户和智读表平台账户是不互通的,需要单独再创建,创建步骤可参考创建MQTT用户和订阅主题
如果多个服务器都订阅同一topic,每个服务器都会收到数据,接收方要注意数据重复添加问题;每条数据都有requestId
,这个是每次上报都会重新生成,可以用于去重复数据。
100数据包括识别值和图片数据,160只有识别值;当一台服务器同时订阅100和160数据,就会同时收到100和160数据,两个数据里的识别值是一样的,进行识别值存储时导致同一个设备识别值重复存储问题
MQTT
账户权限当前的MQTT
账户只提供订阅权限,不提供发布消息的权限。此外,用户的MQTT
账户只能订阅该账户下所允许的topic
路径下的数据,关于topic
的说明可参考TOPIC 规则。
有用户在测试开发时连接MQTT服务正常,但在docker、生成服务器环境中连接出现ssl证书异常错误,很有可能是环境中缺少ssl证书环境造成的,只需要安装类似ca-certificates
的证书依赖,然后用环境变量指定证书文件夹路径即可。详细可参考SSL安全证书问题。
因为ssl一年需要更新一次,所以后期连接包括前期连接MQTT的用户建议使用不使用证书的方式进行连接,采用可信证书的方式进行连接,具体参考使用MQTT.fx接入 、 java连接示例 和 SSL安全证书问题。
这个需要参考java连接示例中的设置,共分为客户端网络不稳定导致连接不稳定和MQTT服务端重启两种情况。
在网络不稳定的情况下,就是MQTT服务正常没有重启的情况下,将自动重连(AutomaticReconnect)属性设置为true,清除session(CleanSession)属性设置为false,这样在客户端网络恢复重新连接后,订阅信息等都会恢复。
在MQTT服务端重启的情况下,在重新连接后,需要重新进行订阅,因为MQTT服务端重启后会丢失客户端的连接、订阅信息。