全部产品

Topic 操作接口

更新时间:2019-04-18 20:05:19

Topic 相关的操作接口如下所示:

  • GetTopicList

  • GetTopicStatus

  • CreateTopic

使用场景

在使用 GetInstanceList 接口获取了您购买地域(Region)下的实例信息后,您可以:

  • 使用 GetTopicList 接口获取某实例下的 Topic 列表。

  • 使用 GetTopicStatus 接口查询某个 Topic 的详细信息。

  • 使用 CreateTopic 接口创建一个 Topic。

注意:所有请求都需要设置此实例所在的地域,而且必须使用 GetInstanceList 返回值里的 instance 的地域。

GetTopicList

根据实例 ID 获取此实例下的 Topic 列表。

请求参数列表

名称 类型 是否必须 描述
InstanceId String 实例 ID,可使用 GetInstanceList 获取
RegionId String 此实例所在地域,可使用 GetInstanceList 获取

返回参数列表

名称 类型 描述
RequestId String 请求的唯一标识 ID
Code Integer 返回码,返回“200”为成功
Message String 描述信息
TopicList Array 实例列表信息

TopicList 数据结构列表

名称 类型 描述
Topic String Topic 名称
CreateTime Long Topic 创建时间
Remark String Topic 备注
Status Integer 状态码: “0”代表服务中;“1”代表冻结;“2”代表暂停
InstanceId String 实例 ID
RegionId String 实例所在地域的 ID
StatusName String 状态描述

使用示例

该示例的接入地域是”华北2“,任务是查询某个实例 ID 下的 Topic 列表。

  1. public static void main(String[] args) {
  2. //构建 client
  3. IAcsClient iAcsClient = buildAcsClient();
  4. //构造获取 topicList 信息的 request
  5. GetTopicListRequest request = new GetTopicListRequest();
  6. request.setAcceptFormat(FormatType.JSON);
  7. //必要参数实例 ID
  8. request.setInstanceId("alikafka_pre-xxxxxxxxxxxx");
  9. //必要参数,此实例所在地域,必须使用 GetInstanceList 返回值的 instance 的地域
  10. request.setRegionId("cn-xxx");
  11. //获取返回值
  12. try {
  13. GetTopicListResponse response = iAcsClient.getAcsResponse(request);
  14. if (200 == response.getCode()) {
  15. List<GetTopicListResponse.TopicListItem> topicListItems = response.getTopicList();
  16. if (CollectionUtils.isNotEmpty(topicListItems)) {
  17. for (TopicListItem item : topicListItems) {
  18. String topic = item.getTopic();
  19. System.out.println(topic);
  20. //......
  21. }
  22. }
  23. } else {
  24. //log warn
  25. }
  26. } catch (ClientException e) {
  27. //log error
  28. }
  29. }
  30. private static IAcsClient buildAcsClient() {
  31. //产品 code
  32. String productName = "alikafka";
  33. //用户 AccessKeyId/AccessKeySecret
  34. String accessKey = "xxxxxx";
  35. String secretKey = "xxxxxx";
  36. //设置接入点相关参数通常 regionId 值和 endPointName 值相等,接入点也是用对应地域的 domain
  37. String regionId = "cn-beijing";
  38. String endPointName = "cn-beijing";
  39. String domain = "alikafka.cn-beijing.aliyuncs.com";
  40. try {
  41. DefaultProfile.addEndpoint(endPointName, regionId, productName, domain);
  42. } catch (ClientException e) {
  43. //log error
  44. }
  45. //构造 client
  46. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKey, secretKey);
  47. return new DefaultAcsClient(profile);
  48. }

GetTopicStatus

根据实例 ID 和 Topic 名称 查询某 Topic 的消息收发数据。

请求参数列表

名称 类型 是否必须 描述
RegionId String 此实例所在地域,可使用 GetInstanceList 获取
InstanceId String 实例 ID,可使用 GetInstanceList 获取
Topic String Topic 名称,可使用 GetTopicList 获取

返回参数列表

名称 类型 描述
RequestId String 请求唯一标识 ID
Code Integer 返回码,返回“200”代表成功
Message String 描述信息
TopicStatus Struct TopicStatus 的数据结构

TopicStatus 的数据结构列表

名称 类型 描述
TotalCount Long 消息总数
LastTimeStamp Long 最后一条消息产生时间
OffsetTable Array Offset 列表

Offset 的数据结构列表

名称 类型 描述
Topic String Topic 名称
Partition Integer 分区的 ID
MinOffset Long 消息最小位点
MaxOffset Long 消息最大位点
LastUpdateTimestamp Long 最新一条消息产生时间

使用示例

该示例的接入地域为“华北 2”,任务是查询用户在某实例下的某个 Topic 的消息收发信息。

  1. public static void main(String[] args) {
  2. //构建 client
  3. IAcsClient iAcsClient = buildAcsClient();
  4. //构造获取 topic 信息的 request
  5. GetTopicStatusRequest request = new GetTopicStatusRequest();
  6. request.setAcceptFormat(FormatType.JSON);
  7. //必要参数实例 ID
  8. request.setInstanceId("alikafka_pre-xxxxxx");
  9. //必要参数获取哪个地域的实例
  10. request.setRegionId("cn-xxx");
  11. //必要参数 topic
  12. request.setTopic("test-xxxxxx");
  13. //获取返回值
  14. try {
  15. GetTopicStatusResponse response = iAcsClient.getAcsResponse(request);
  16. if (200 == response.getCode()) {
  17. GetTopicStatusResponse.TopicStatus topicStatus = response.getTopicStatus();
  18. if (topicStatus != null) {
  19. Long totalCount = topicStatus.getTotalCount();
  20. System.out.println(totalCount);
  21. for (GetTopicStatusResponse.TopicStatus.OffsetTableItem item : topicStatus.getOffsetTable()) {
  22. item.getTopic();
  23. item.getPartition();
  24. item.getMaxOffset();
  25. //......
  26. }
  27. }
  28. } else {
  29. //log warn
  30. }
  31. } catch (ClientException e) {
  32. //log error
  33. }
  34. }
  35. private static IAcsClient buildAcsClient() {
  36. //产品 code
  37. String productName = "alikafka";
  38. //用户 AccessKeyId/AccessKeySecret
  39. String accessKey = "xxxxxx";
  40. String secretKey = "xxxxxx";
  41. //设置接入点相关参数通常 regionId 值和 endPointName 值相等,接入点也是用对应地域的 domain
  42. String regionId = "cn-beijing";
  43. String endPointName = "cn-beijing";
  44. String domain = "alikafka.cn-beijing.aliyuncs.com";
  45. try {
  46. DefaultProfile.addEndpoint(endPointName, regionId, productName, domain);
  47. } catch (ClientException e) {
  48. //log error
  49. }
  50. //构造 client
  51. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKey, secretKey);
  52. return new DefaultAcsClient(profile);
  53. }

CreateTopic

根据实例 ID 创建 Topic。

使用限制

该接口有以下使用限制:

  • 接口调用受白名单限制,请提交工单申请将用户 ID 加入白名单。
  • 单用户请求频率限制为 1 QPS。
  • 每个实例下最多可创建 50 个 Topic。

请求参数列表

名称 类型 是否必须 描述
InstanceId String 实例 ID,可使用 GetInstanceList 获取
RegionId String 此实例所在地域,可使用 GetInstanceList 获取
Topic String 创建的 Topic 名称,限制 64 个字符
Remark String 创建的 Topi c的备注,限制 64个字符

返回参数列表

名称 类型 描述
RequestId String 请求的唯一标识 ID
Code Integer 返回码,返回“200”为成功
Success Boolean 是否成功
Message String 描述信息

使用示例

该示例的接入地域是”华北2“,任务是在某实例下创建一个 Topic。

  1. public static void main(String[] args) {
  2. //构建 client
  3. IAcsClient iAcsClient = buildAcsClient();
  4. //构造创建 topic 信息的 request
  5. CreateTopicRequest request = new CreateTopicRequest();
  6. request.setAcceptFormat(FormatType.JSON);
  7. //必要参数,实例 ID
  8. request.setInstanceId("alikafka_XXXXXXXXXXXXXX");
  9. //必要参数,实例所在的地域
  10. request.setRegionId("cn-qingdao");
  11. //必要参数 topic 64 个字符以内
  12. request.setTopic("alikafka_for_test_1");
  13. //必要参数 remark 64 个字符以内
  14. request.setRemark("myTest");
  15. //获取返回值
  16. try {
  17. CreateTopicResponse response = iAcsClient.getAcsResponse(request);
  18. //log requestId for trace
  19. String requestId = response.getRequestId();
  20. if (200 == response.getCode()) {
  21. if (response.getSuccess()) {
  22. //log success
  23. } else {
  24. //log warn
  25. }
  26. } else {
  27. //log warn
  28. }
  29. } catch (ClientException e) {
  30. //log error
  31. }
  32. }
  33. private static IAcsClient buildAcsClient() {
  34. //产品 code
  35. String productName = "alikafka";
  36. //用户 AccessKeyId/AccessKeySecret
  37. String accessKey = "xxxxxx";
  38. String secretKey = "xxxxxx";
  39. //设置接入点相关参数通常 regionId 值和 endPointName 值相等,接入点也是用对应地域的 domain
  40. String regionId = "cn-beijing";
  41. String endPointName = "cn-beijing";
  42. String domain = "alikafka.cn-beijing.aliyuncs.com";
  43. try {
  44. DefaultProfile.addEndpoint(endPointName, regionId, productName, domain);
  45. } catch (ClientException e) {
  46. //log error
  47. }
  48. //构造 client
  49. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKey, secretKey);
  50. return new DefaultAcsClient(profile);
  51. }