我在使用开源版5.7.2 (Open Source)时,我用了2个springboot服务连接emqx作为消息处理中心。使用python脚本模拟2千台设备连续发送消息共20万条。发现当qos为0的时候,20万条消息没有丢失情况,iot连接也没有异常断开。但是qos为1的时候,就会导致iot服务断开连接,导致消息丢失。按官方说明,qos为1的时候是确保消息至少到达一次的,但是为啥iot连接断开时也会把qos为1的消息丢掉了
qos1的交互要复杂一些,所以能承受的tps就小一点,你这个应该是qos0 根本就没断开,但是这个流量打到qos1的时候就已经断开了,你断开再重连 中间有那消息就会没了,
1 qos0多打点流量,让他受不了断开,就会看到丢弃。
2 试一试在连接的时候把cleanstart改成false,这样客户端离线后上线也能够把之前的消息拉回来。
cleanstart是在emqx端设置的?我在iot服务端设置了cleanSession: false 但是发现iot依然会断开,并且断开后自动重连后,队列满丢失的消息拉不回来
你是对的,
如果你用的是 mqtt v3 v4,那就是 clean session。
可以给你写 iot 服务端程序的人看看怎么回事,这个是基础功能,应该不会错,建议你使用 MQTTX 验证一下这个基础功能。