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();
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。