开发者社区> 问答> 正文

如何查询设备在线信息

OnsMqttQueryClientByClientId 接口用于查询指定设备的在线信息以及订阅关系等数据,查询条件是 clientId。

使用场景

查询设备信息的接口一般用于线上追踪单个设备的运行状态及排查问题。输入 clientId 即可查到对应设备是否在线,设备地址,以及当前的订阅关系等信息。

请求参数列表

名称    类型    是否必须    描述
OnsRegionId    String    是    当前操作的 MQ 所在区域,详情参见公共术语。
OnsPlatform    String    否    请求来源,默认是从 POP 平台。
PreventCache    Long    是    用于 CSRF 校验,设置为系统当前时间即可。
ClientId    String    是    需要查询的目标 clientId。
返回参数列表

名称    类型    描述
RequestId    String    为公共参数,每个请求独一无二,用于排查定位问题。
HelpUrl    String    帮助链接
Data    MqttClientInfoDo    设备在线信息数据结构
MqttClientInfoDo 数据结构

名称    类型    描述
Online    Boolean    设备是否在线
ClientId    String    设备的 clientId 名称
SocketChannel    String    设备连接的 IP 地址
LastTouch    Long    最后更新时间
SubScriptonData    List(SubscriptionDo)    该设备当前的订阅关系集合
SubscriptionDo 数据结构

名称    类型    描述
ParentTopic    String    MQTT 的一级父 Topic
SubTopic    String    MQTT 的多级子 Topic,如果没有则为 NULL。
Qos    Integer    订阅关系的 QoS 级别
错误码列表



相关 API

OnsMqttQueryClientByTopic:根据 Topic 查询当前订阅该 Topic 的在线客户端数量。

使用示例

本示例仅仅提供一个参考,从杭州接入点接入,查询指定 clientId 的在线数据。

    public static void main(String[] args) {
        String regionId = "cn-hangzhou";
        String accessKey = "XXXXXXXXXXXXXXXXX";
        String secretKey = "XXXXXXXXXXXXXXXXX";
        String endPointName ="cn-hangzhou";
        String productName ="Ons";
        String domain ="ons.cn-hangzhou.aliyuncs.com";
        /**
        *根据自己所在的区域选择 Region 后,设置对应的接入点。
        */
        try {
            DefaultProfile.addEndpoint(endPointName,regionId,productName,domain);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        IClientProfile profile= DefaultProfile.getProfile(regionId,accessKey,secretKey);
        IAcsClient iAcsClient= new DefaultAcsClient(profile);
        OnsMqttQueryClientByClientIdRequest request = new OnsMqttQueryClientByClientIdRequest();
        /**
        *ONSRegionId 是指你需要 API 访问 MQ 哪个区域的资源。
        *该值必须要根据 OnsRegionList 方法获取的列表来选择和配置,因为 OnsRegionId 是变动的,不能够写固定值。
        */
        request.setOnsRegionId("XXXX");
        request.setPreventCache(System.currentTimeMillis());
        request.setAcceptFormat(FormatType.JSON);
        request.setClientId("GID_XXX@@@XXXXX");
        try {
                 OnsMqttQueryClientByClientIdResponse response = iAcsClient.getAcsResponse(request);
                OnsMqttQueryClientByClientIdResponse.MqttClientInfoDo clientInfoDo = response.getMqttClientInfoDo();
                System.out.println(clientInfoDo.getOnline() + "  " +
                        clientInfoDo.getClientId() + "  " +
                        clientInfoDo.getLastTouch() + "  " +
                        clientInfoDo.getSocketChannel());
                for (OnsMqttQueryClientByClientIdResponse.MqttClientInfoDo.SubscriptionDo subscriptionDo : clientInfoDo.getSubScriptonData()) {
                    System.out.println(subscriptionDo.getParentTopic() + "   " + subscriptionDo.getSubTopic() + "  " + subscriptionDo.getQos());
                }
        } catch (ServerException e) {
          e.printStackTrace();
        } catch (ClientException e) {
          e.printStackTrace();
        }
    }

展开
收起
猫饭先生 2017-10-27 14:01:48 2364 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
连接管理平台:为按需安全智能的连接服务而来 立即下载
腾讯TB级别的海量日志监控平台 立即下载
内容安全检测与管控 立即下载