当前位置:   article > 正文

阿里专有云OpenAPI开发实践之消息队列_rocketmq3.14.0

rocketmq3.14.0

阿里专有云OpenAPI开发实践之消息队列

企业在使用阿里专有云服务的时候,自带的ASCM操作界面不一定满足企业的管理需求,并且提供的功能也不一定很全面,那么企业要按自己的需求开发一套操作界面,可以吗?专有云提供了一套庞大的OpenAPI,可能不一定包含所有功能,但已经很强大,可以满足企业日常大部分需求。专有云上的产品众多,不同的产品也是由不同的团队开发,提供的接口也不尽相同,这篇文章分享一下其中一个产品–消息队列MQ。

这里说的消息队列,对应的是MQ RocketMQ版。原名开放消息服务,简称ONS。本文介绍的不是对MQ产品本身的发布/订阅这种使用,而是使用OpenAPI开发MQ控制台功能。在开发之前,我们自然需要了解尽可能多的资料,有没有什么途径可以了解API呢?其实在官网已经提供了一些文档,可以帮助我们了解产品的API接口。

环境介绍

软件版本
专有云3.12.0、3.14.0

文档资料

消息队列MQ产品的Endpoint

不同的云产品有自己的Endpoint,消息队列的Endpoint格式如下:
https://mq.console.ext.xxx.xxx.xxx

xxx.xxx.xxx是企业专有云的域名,比如: m.myself.com,那么完整Endpoint就是: https://mq.console.ext.m.myself.com
这个地址是根据专有云运维团队进行配置的,如果不对可以咨询运维具体的Endpoint
另外需要注意的是,专有云服务有白名单功能,不是任意IP都可以访问,如果telnet不通,可以申请开通专有云访问权限

消息队列产品没有相应的SDK

开发专有云消息队列控制台功能,没有相应的SDK,只能根据接口文档进行http请求的调用。

简单调用示例

以查询MQ实例列表接口为例,请求的完整接口地址是:
https://mq.console.ext.m.myself.com/json/instance/list

请求示例代码:

    @Test
    void onsDemo_oneInstanceList() {
        //设置Http的Header
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        //设置访问参数
        Map<String, Object> params = new LinkedHashMap<>();
        params.put("_accesskey", accessKeyId);
        params.put("__preventCache", String.valueOf(System.currentTimeMillis()));
        params.put("_regionId", aliyunPropClientProperties.getRegionId());
        params.put("_signature", SignatureUtils.getSignatureOpenApi(accessKeySecret, params));

        HttpEntity entity = new HttpEntity<>(params, headers);

        String url = "https://mq.console.ext.m.myself.com";
        String path = "/json/instance/list";

        StringBuilder urlBuilder = new StringBuilder();
        urlBuilder.append(url).append(path).append("?");
        for(Map.Entry<String, Object> entry : params.entrySet()) {
            urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
        }
        urlBuilder.setLength(urlBuilder.length()-1);

        ResponseEntity<String> testResult = restTemplate.getForEntity(new URI(urlBuilder.toString()), String.class);
        assertEquals(HttpStatus.OK, testResult.getStatusCode());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

RAM授权

  • 如果提示没有权限,或者查不到数据,需要对用户进行RAM授权。
  • 参考官方资料:https://help.aliyun.com/document_detail/112711.html
  • RAM授权示例如下
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "mq:OnsInstanceBaseInfo",
        "mq:QueryGroupSubDetail",
        "mq:*Query",
        "mq:Query*",
        "mq:List*",
        "mq:*List",
        "mq:PUB",
        "mq:SUB"
      ],
      "Resource": [
        "acs:mq:*:*:*"
      ]
    },
    {
      "Action": [
        "mq:QueryGroupSubDetail"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

《开发指南》之外的OpenAPI

《开发指南》中有获取Topic授权列表,接口地址是/json/empower/list

但是《开发指南》中并没有获取Group授权列表的接口说明,经过咨询得知,接口地址是/json/empower/listGroup

总结

  • 消息队列的控制台API没有SDK,需要使用原生http发起请求
  • 使用RestTemplate这个工具调用时,需要把签名后的url包装成URI对象,否则会报-4009签名错误
  • 《开发指南》没有的API,需要咨询阿里TIM团队进一步确认是否有相应的接口
  • 专有云有IP白名单限制,不是每个人的IP都可以访问专有云,需要申请开通访问权限
  • 界面是靠组织用户角色进行管理,OpenAPI是靠RAM授权,没有RAM授权就会出现在界面上能正常查到数据,通过API查不到
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/284378
推荐阅读
相关标签
  

闽ICP备14008679号