开发者社区> 问答> 正文

消息轨迹查询怎么办?

本接口限企业铂金版客户专用,请前往铂金版购买页面查看详情。

描述

OnsMessageTrack 接口用于判断目标 MsgId 对应的消息是否已经消费过。

使用场景

MessageTrack 接口一般用于判断指定的消息是否曾经被消费过,查询条件为单条消息的 MsgId。需要注意的是 MessagTrack 的实现基于 MQ 的内部位点机制,在大部分场景下判断结果可信,但如果应用方进行过重置位点已经清除消息等操作,则判断结果可能有误。

请求参数列表

名称    类型    是否必须    描述
OnsRegionId    String    是    设置所要查询的区域,具体值通过OnsRegionList接口获取
OnsPlatform    String    否    该请求来源,默认是从 POP 平台
PreventCache    Long    是    用于 CSRF 校验,设置为系统当前时间即可
Topic    String    是    消息的 Topic
MsgId    String    是    消息 ID
返回参数列表

名称    类型    描述
RequestId    String    为公共参数,每个请求独一无二
HelpUrl    String    帮助链接
Data    List(MessageTrack)    查询结果
MessageTrack 数据结构

名称    类型    描述
ConsumerGroup    String    消费集群名称
TrackType    String    当前状态
ExceptionDesc    String    异常描述
相关 API

OnsMessageGetByMsgId:根据 MsgId 精确查询消息
使用示例

   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);
           OnsMessageTraceRequest request = new OnsMessageTraceRequest();
            /**
            *ONSRegionId是指你需要API访问MQ哪个区域的资源.
            *该值必须要根据OnsRegionList方法获取的列表来选择和配置,因为OnsRegionId是变动的,不能够写固定值
            */
           request.setOnsRegionId("daily");
           request.setPreventCache(System.currentTimeMillis());
           request.setAcceptFormat(FormatType.JSON);
           request.setTopic("MingduanTest");
           request.setMsgId("0A91883700001F90000001BF4723CB3E");
           try {
               OnsMessageTraceResponse response=iAcsClient.getAcsResponse(request);
               List<OnsMessageTraceResponse.MessageTrack> trackList =response.getData();
               for (OnsMessageTraceResponse.MessageTrack track:trackList){
                   System.out.println(track.getConsumerGroup()+"  "+track.getTrackType()+"  "+track.getExceptionDesc());
               }
           } catch (ServerException e) {
               e.printStackTrace();
           } catch (ClientException e) {
               e.printStackTrace();
           }
       }

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载