bruce
1
环境
- EMQX 版本:5.0.26
- 操作系统版本:centos 7.9.2009
重现此问题的步骤
我有两万多个客户端,通过分页请求获取所有客户端信息
循环一页一页的调用
api/v5/clients?page=1&limit=1000
api/v5/clients?page=N&limit=1000
直到 hasnext=false
但是最后汇总的结果会漏掉某些客户端
比如:我总共获取了2万个客户端,没有 客户端A00018,但是在 dashboard 中通过查找, 能查询到A00018,通过 api/v5/clients/A00018 也能 查询到,请有空帮忙看看
大概率是2W的客户端不是一直保持在线的,有的会断开重连。这样他就有可能在这时间内没统计到?
如果你确定不是上面这种情况。所以这样拿客户端状态也不是很靠谱。得用上下线事件来做会更好。
PS: 我们在5.1上提升了这个API的搜索速度。建议升级一下。
bruce
3
谢谢你的回答。我们的设备状态是通过数据桥接webhook 来推送(client_connect和disconnet) 到服务端,但是这个机制有时候也会丢消息, 导致每个小时都会有几十个设备,假在线(mqtt 列表中有这个设备,但是数据库/缓存的状态是离线),假离线。所以我们才会每个小时用脚本 去获取mqtt 列表中的client,纠正一下状态。 这个webhook 推送有两种方式,一个同步推送,一个异步,我目前设置的同步推送