emqx 设备离线后,消息延迟问题

emqx使用版本 V5.8.7
linux 环境
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

场景:
我使用emqx服务端,然后使用设备连接到服务器
操作:
1、我把设备断电,emqx当时并没有发现设备离线消息,我再把设备上电,收到emqx2条消息,设备离线,设备在线,时间在几毫秒范围内
2、我把设备断电,emqx当时并没有发现设备离线消息,我一直等待,大概2分钟之后,收到设备离线消息

使用emqxweb端查询客户端信息如下
协议
MQTT

v3.1.1
监听器 tcp:default
IP 地址 61.190.104.29:50249
心跳 90
清除会话 true
桥接标识 false

问题:
1、为什么设备离线几分钟之后才收到设备离线消息这种情况该怎么解决,
2、上线后,同时接收到2条消息是怎么回事
3、客户端或者服务器可以做些什么解决这个问题

  1. 因为你的 keepalive 设置过大了,断电时设备没有机会主动断开tcp连接,emqx 会通过多长时间没有收到心跳包,来判断设备已经离线了。要断开快,你可以把 keepalive 设置短一点。
  2. 我猜是你设置了保留消息,你可以打开 emqx 的 debug 日志 看看。

3.1 把MQTT keepalive 调小一点。调整 emqx 和设备的 tcp 内核 keepalive 参数。
3.2 不要发保留消息。