客户端版本是mqttV3.1
EMQX开源版代理服务器
设备在离线时会发送遗嘱消息,测试过程中发现,会偶发性的出现遗嘱消息乱码的情况,通过EMQX日志跟踪,监测了遗嘱消息的主题以及平台服务器的IP,复测到了乱码的情况,图片中就是正常的遗嘱报文和出现乱码时的遗嘱报文,请问这种情况是为什么会发生的,我该怎么规避这种情况。
可能是你的客户端连接 emqx 的时候,发送了一个非法的遗嘱消息上来,你复现一下看看,检查 CONNECT 报文里的 Will msg 字段。
1 个赞
好的,我试一下
您好,怎么才能检测到CONNECT报文里的Will msg,我通过系统主题“$SYS…/clients/+connected",里面没有这个字段
- 抓包观察
- 检查日志中有无其他序列化失败的报错信息?
抓包可能比较难,这个概率有点低,可以肯定的是出现问题时对应的设备在当时连接时,配置的遗嘱消息体是没有问题的,但是不明白为什么代理发出来的就变成了乱码,有没有更直接追溯方式,第二个问题,日志中没发现其他序列化失败的报错信息,目前只有遗嘱消息出现问题。
",["Payload=",{error,"{
这部分是有可能是二进制报文尝试转为 TEXT 格式显示时失败了。
重建日志追踪,并把负载编码设置为 hex
然后查找 CONNECT 报文中的 Will 部分
看是不是客户端发的遗嘱消息本身就有问题。
msg: mqtt_packet_received, packet: CONNECT.....