全部产品
云市场

OnsMessagePageQueryByTopic

更新时间:2019-08-14 15:52:15

使用 OnsMessagePageQueryByTopic 通过传入 Topic 名称和时间段,分页查询指定时间段内该 Topic 内存在的所有消息。

描述

按 Topic 查询消息的方式属于范围查询,查询结果会通过分页的方式展示给调用方,仅适用于没有任何搜索条件(Message ID 和 Message Key)查询场景。需注意的是,根据 Topic 查询消息应尽可能缩短查询的时间区间,否则匹配的消息过多,将无法定位问题。

调用流程如下所示:

  1. 传入 Topic、起止时间以及每页的大小,进行分页查询。如果有消息,默认返回第一页的消息、总页数和查询任务 ID。

  2. 根据返回的结果中的查询任务 ID,进行后续取消息,取消息时传入查询任务 ID 以及当前页数。

请求参数列表

名称 类型 是否必需 描述
PreventCache Long 用于 CSRF 校验,设置为系统当前时间即可,单位毫秒(ms)
InstanceId String 需查询的消息所对应的实例 ID
Topic String 需查询的消息的 Topic 名称
BeginTime Long 查询范围的起始时间戳
EndTime Long 查询范围的终止时间戳
TaskId String 查询任务的 ID,首次查询不需要输入,后续取消息必须传入,根据前一次的返回结果取出该字段
CurrentPage Integer 当前取第几页消息,从 1 开始递增,最大值为 50,取消息时不可超过最大页数
PageSize Integer 分页查询,每页最多显示消息数量,默认是 20,最小 5 条,最多 50 条

返回参数列表

名称 类型 描述
RequestId String 为公共参数,每个请求的 ID 都是唯一的
HelpUrl String 帮助链接
MsgFoundDo MsgFoundDo 查询结果

MsgFoundDo 数据结构列表

名称 类型 描述
TaskId String 第一次新建查询时,返回的查询任务 ID,用于后续取消息
MaxPageCount Long 查询结果最大页数
CurrentPage Long 当前位于第几页
Data List(OnsRestMessageDo) 当前页的消息集合,该类型与 messageGetById 的返回结果一致

使用示例

新建查询调用示例

  1. public static void main(String []args) {
  2. String regionId = "cn-hangzhou";
  3. String accessKey = "XXXXXXXXXXXXXXXXX";
  4. String secretKey = "XXXXXXXXXXXXXXXXX";
  5. String endPointName ="cn-hangzhou";
  6. String productName ="Ons";
  7. String domain ="ons.cn-hangzhou.aliyuncs.com";
  8. /**
  9. *按需选择地域(Region),并设置对应的接入点
  10. */
  11. try {
  12. DefaultProfile.addEndpoint(endPointNameregionIdproductNamedomain);
  13. } catch (ClientException e) {
  14. e.printStackTrace();
  15. }
  16. IClientProfile profile= DefaultProfile.getProfile(regionIdaccessKeysecretKey);
  17. IAcsClient iAcsClient= new DefaultAcsClient(profile);
  18. OnsMessagePageQueryByTopicRequest request = new OnsMessagePageQueryByTopicRequest();
  19. request.setPreventCache(System.currentTimeMillis());
  20. request.setInstanceId("XXXXX");
  21. request.setTopic("MingduanTest");
  22. request.setBeginTime(System.currentTimeMillis()-24*3600*1000);
  23. request.setEndTime(System.currentTimeMillis());
  24. request.setCurrentPage(1);
  25. request.setPageSize(20);
  26. try {
  27. OnsMessagePageQueryByTopicResponse response = iAcsClient.getAcsResponse(request);
  28. } catch (ServerException e) {
  29. e.printStackTrace();
  30. } catch (ClientException e) {
  31. e.printStackTrace();
  32. }
  33. }

分页取消息调用示例

  1. public static void main(String []args) {
  2. String regionId = "cn-hangzhou";
  3. String accessKey = "XXXXX";
  4. String secretKey = "XXXXX";
  5. IClientProfile profile = DefaultProfile.getProfile(regionId accessKey secretKey);
  6. IAcsClient iAcsClient = new DefaultAcsClient(profile);
  7. OnsMessagePageQueryByTopicRequest request = new OnsMessagePageQueryByTopicRequest();
  8. request.setPreventCache(System.currentTimeMillis());
  9. request.setInstanceId("XXXXXXX");
  10. request.setTopic("MingduanTest");
  11. request.setBeginTime(System.currentTimeMillis()-24*3600*1000);
  12. request.setEndTime(System.currentTimeMillis());
  13. request.setCurrentPage(3);
  14. request.setTaskId("0ADA91A600002A9F000002ADDA8137E8");
  15. try {
  16. OnsMessagePageQueryByTopicResponse response = iAcsClient.getAcsResponse(request);
  17. } catch (ServerException e) {
  18. e.printStackTrace();
  19. } catch (ClientException e) {
  20. e.printStackTrace();
  21. }
  22. }