
阿里专有云OpenAPI开发实践之消息队列
目录阿里专有云OpenAPI开发实践之消息队列环境介绍文档资料消息队列MQ产品的Endpoint消息队列产品没有相应的SDK简单调用示例RAM授权《开发指南》之外的OpenAPI总结阿里专有云OpenAPI开发实践之消息队列企业在使用阿里专有云服务的时候,自带的ASCM操作界面不一定满足企业的管理需求,并且提供的功能也不一定很全面,那么企业要按自己的需求开发一套操作界面,可以吗?专有云提供了一套庞
目录
阿里专有云OpenAPI开发实践之消息队列
企业在使用阿里专有云服务的时候,自带的ASCM操作界面不一定满足企业的管理需求,并且提供的功能也不一定很全面,那么企业要按自己的需求开发一套操作界面,可以吗?专有云提供了一套庞大的OpenAPI,可能不一定包含所有功能,但已经很强大,可以满足企业日常大部分需求。专有云上的产品众多,不同的产品也是由不同的团队开发,提供的接口也不尽相同,这篇文章分享一下其中一个产品–消息队列MQ。
这里说的消息队列,对应的是MQ RocketMQ版。原名开放消息服务,简称ONS。本文介绍的不是对MQ产品本身的发布/订阅这种使用,而是使用OpenAPI开发MQ控制台功能。在开发之前,我们自然需要了解尽可能多的资料,有没有什么途径可以了解API呢?其实在官网已经提供了一些文档,可以帮助我们了解产品的API接口。
环境介绍
软件 | 版本 |
---|---|
专有云 | 3.12.0、3.14.0 |
文档资料
- 专有云文档中心地址: https://help.aliyun.com/apsara/index.html
- 专有云3.12.0版本的RocketMQ开发指南下载
- 专有云3.14.0版本的RocketMQ开发指南下载
消息队列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());
}
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"
}
]
}
《开发指南》之外的OpenAPI
《开发指南》中有获取Topic授权列表,接口地址是/json/empower/list
但是《开发指南》中并没有获取Group授权列表的接口说明,经过咨询得知,接口地址是/json/empower/listGroup
总结
- 消息队列的控制台API没有SDK,需要使用原生http发起请求
- 使用RestTemplate这个工具调用时,需要把签名后的url包装成URI对象,否则会报-4009签名错误
- 《开发指南》没有的API,需要咨询阿里TIM团队进一步确认是否有相应的接口
- 专有云有IP白名单限制,不是每个人的IP都可以访问专有云,需要申请开通访问权限
- 界面是靠组织用户角色进行管理,OpenAPI是靠RAM授权,没有RAM授权就会出现在界面上能正常查到数据,通过API查不到
更多推荐
所有评论(0)