EMQX 批量获取多台设备的在离线状态

我有一个需求,需要获取 100个指定clientId的值,目前的做法只能是通过http api 的 /clients/{clientId} 接口挨个挨个进行调用,但当数量多了之后,对服务器性能也造成了负担,是否有更好的解决方案,通过一次接口调用就可以获得指定设备的状态

你好,获取大量的客户端连接状态可以通过 /api/v5/clients 接口返回的数据里面含有所有的clientid以及连接状态

/clients 接口获取的是所有的设备信息,但当设备量比较大的时候(当前的设备量就已经上万台,未来可能甚至可能会更多),如果我通过这个接口的话,做法是通过这个接口分页获取,然后进行过滤,那可能出现的情况是需要去遍历这上万台的设备数据,对服务器来说可能会造成挺大的压力,没有什么方法可以批量指定对应的设备吗?还是说我对这个接口的使用理解有误?

目前不支持在 /api/v5/clients API 接口中一次指定查询多个 clientid。

但如果这些客户端的 clientid/username 有规律且不与其他客户端重合的话,可以使用 like_clientidlike_username 查询参数进行字串搜索过滤。

感谢反馈 :rocket:

我会和产品部门反馈,考虑下是否提供这样的 API 查询能力。

可以主动订阅客户端登录离线事件"$SYS/brokers/+/clients/#",时时感知在线状态变化

这个和
$events/client_connected
$events/client_disconnected
有什么区别吗?

有点区别,“$SYS/brokers/+/clients/#” 是一个特殊的主题(topic),用于订阅MQTT代理中所有客户端相关的系统信息。它包含了有关所有客户端连接状态、客户端ID、客户端订阅等信息的更新。
MQTT协议中的"$events/client_connected"是一个特殊的主题(topic),用于订阅客户端连接事件。当客户端成功连接到MQTT代理时,代理将发布一条消息到该主题上,以通知订阅了该主题的客户端。

我们计划在 API 上支持多个客户端 ID 的检索能力:

GET /clients?clientid=foo&clientid=bar&clientid=gene

如果要实现更多的能力,推荐使用规则引擎处理客户端上下线事件,并同步到数据库中,到时候直接操作数据库查询即可。

请问是什么时候该API会上线?

已经排进 5.6.0 ,计划 3 月中旬