客户端断网离线后,网络恢复,客户端重连,但是消息丢失

环境信息

  • EMQX 版本:v3.2.3
  • 操作系统及版本:ubuntu
  • 其他

问题描述

客户端断网离线后,网络恢复,客户端重连,但是消息丢失。
客户端订阅主题之后,发送端一直发送消息。但是客户端断网离线。忘了恢复后重新连接后,没有接受到断网期间的消息。 设置了opts.SetCleanSession(false)
如图中所示,断网超时后,网络正常自重重新连接后,5-11的消息没有接收到。

配置文件及日志

3.x的版本已经早退市了,建议用最新 4.4.x的版本。

这个问题跟版本有关系么? 还是我设置的问题?

3.x 和现在的版本大部分功能都是不一致的,我们已经没有进行维护了,也无法提供有效的服务
建议先升级版本

更换了最新版本的docker 。也是一样的情况
我推测是因为我心跳检测opts.SetKeepAlive(5 * time.Second) 5s。导致断网的5s内emqx还认为客户端在线?重新连接后,导致这部分消息丢失了?
那如果是这样的原因,该怎么进行设置呢?

不断网,我直接停止客户端,再重新运行客户端,消息确实没有丢失的情况。

如果希望客户端离线后,会话继续保存一段时间,需要使用 MQTT 5.0 的 session expire 功能,可以看这篇介绍

https://emqx.medium.com/mqtt-5-0-new-feature-clean-start-and-session-expiry-interval-748d4b1a2a95