全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
消息队列 MQ

查询设备在线信息

更新时间:2017-11-24 10:19:26

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();
        }
    }
本文导读目录