开发者社区> 问答> 正文

消息查询怎么使用

OnsMqttQueryMsgByPubInfo 接口根据发送端信息查询消息。

使用场景

根据发送方信息查询消息的接口一般用于线上排查问题,或者查询某条消息的推送到达率等场景使用。需要输入发送方的详细信息来定位特定的消息。条件越精确,匹配出的消息越精确。获取到消息的 TraceId 之后即可根据 TraceId 调用 OnsMqttQueryTraceByTraceId 接口查询该条消息的实际推送量。

请求参数列表

名称    类型    是否必须    描述
OnsRegionId    String    是    当前操作的 MQ 所在区域,详情参见公共术语。
OnsPlatform    String    否    请求来源,默认是从 POP 平台。
PreventCache    Long    是    用于 CSRF 校验,设置为系统当前时间即可。
Topic    String    是    需要查询的消息的完整 Topic。
ClientId    String    是    该消息的发送方 ClientId。
BeginTime    Long    是    消息发送时间的起始范围。
EndTime    Long    是    消息发送时间的终止范围,时间范围越小查询越精确,默认只允许查询30分钟区间。
返回参数列表

名称    类型    描述
RequestId    String    为公共参数,每个请求独一无二,用于排查定位问题。
HelpUrl    String    帮助链接
MqttMessageDos    List(MqttMessageDo)    匹配到的所有消息
MqttMessageDo 数据结构

名称    类型    描述
PubTime    Long    消息的精确发送时间
TraceId    String    消息唯一的 TraceId,根据该 ID 可以查询到推送量。
错误码列表



相关 API

OnsMqttQueryTraceByTraceId:根据 TraceId 查询指定消息的推送量。

使用示例

本示例仅仅提供一个参考,从杭州接入点接入,查询指定信息查询符合条件的所有消息。

    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);
        OnsMqttQueryMsgByPubInfoRequest request = new OnsMqttQueryMsgByPubInfoRequest();
        /**
        *ONSRegionId 是指你需要 API 访问 MQ 哪个区域的资源。
        *该值必须要根据 OnsRegionList 方法获取的列表来选择和配置,因为 OnsRegionId 是变动的,不能够写固定值。
        */
        request.setOnsRegionId("XXXX");
        request.setPreventCache(System.currentTimeMillis());
        request.setAcceptFormat(FormatType.JSON);
        request.setBeginTime(System.currentTimeMillis()-1000*60);
        request.setEndTime(System.currentTimeMillis());
        request.setClientId("GID_XXX@@@XXXX");//发送方的 clientId
        request.setTopic("XXX/XX/XXX");
        try {
                 OnsMqttQueryMsgByPubInfoResponse response = iAcsClient.getAcsResponse(request);
                List<OnsMqttQueryMsgByPubInfoResponse.MqttMessageDo> msgList = response.getMqttMessageDos();
                for(OnsMqttQueryMsgByPubInfoResponse.MqttMessageDo msg:msgList){
                    System.out.println(msg.getpubTime() + "  " +msg.getTraceId());
                }
        } catch (ServerException e) {
          e.printStackTrace();
        } catch (ClientException e) {
          e.printStackTrace();
        }
    }

展开
收起
猫饭先生 2017-10-27 14:09:02 1791 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Apache Flink 流式应用中状态的数据结构定义升级 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载