问题描述:
emq平常能正常运行,发送和接收数据都没有问题,在与设备调试过程中突然出现掉线重连,重启程序服务也无法解决,需要重启emq服务才行。
问题分析:可能原因
1、重复clientId 排除,确定没有重复clientId
2、网络问题导致没有收到心跳 排除,因为程序和emq服务器在同一台电脑上不存在网络问题,而且重连的请求emq也能收到。
3、代码报错,导致emq服务连不上 极大可能
因为之前是可以的,后面才出现问题,经和设备开发人员沟通,发现是设备回复了错误的保留信息,程序解析出错,而且没有捕捉该错误,至此问题定位成功。这也能解释为什么重启emq服务器后就暂时不会出现该问题,因为emq不提供持久化功能,数据都存在内存里,重启emq服务后,保存内存的数据也被清空。
保留消息定义
如果PUBLISH消息的RETAIN标记位被设置为1,则称该消息为“保留消息”;
BROKER对保留消息的处理
Broker会存储每个Topic的最后一条保留消息及其Qos,当订阅该Topic的客户端上线后,Broker需要将该消息投递给它。