使用华为SDK开发MRS API应用初实践(Java语言)
在今天的技术世界里,接入华为云服务API可以比你想象的更简单。
作为一名华为云相关的开发者,我深知那些看似繁琐的请求体编写和URL拼接实际上有多么耗时。幸运的是,华为云提供了一整套易于使用的SDK,大大简化了整个开发过程。
在这篇文章中,我将分享我的个人经验和实用技巧,希望能帮助像我一样的开发者更高效地使用MRS服务,无论你是刚刚起步还是正在寻找改进开发流程的方法,这里都有你需要的东西。
SDK获取
首先,你需要根据你的语言,选取SDK的获取方式。
我们可以进入这个链接SDK中心——MapReduce服务
里面针对5种不同的语言,都提供了相关的安装方式。
我的语言环境是JAVA,因此只需要在pom文件中加入
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-mrs</artifactId>
<version>3.1.74</version>
</dependency>
实际版本号按需选择,例如你想使用的API是最近刚发布的,那么就需要使用最新的mrs sdk版本号(上面那个链接里所显示的版本号)。
但是在工程实践中引入第三方包时,很容易存在版本依赖冲突, 例如工程需要的jackson版本和sdk依赖的jackson版本不一致导致应用时报错。
一种处理方式是手动分析依赖树,在pom里进行指定包的exclude的排除。
另一种官方的处理方式,是改为引入如下这个bundle包:
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-bundle</artifactId>
<version>${version}</version>
</dependency>
这个包包含了所有支持的服务和重定向了SDK依赖的第三方软件,可以避免和工程自身依赖的库产生冲突。但注意bunlde包里已经包含了mrs服务的包了,无需再进行额外引入。
配置认证信息
要发起华为云的API调用,首先必须得有相应的认证信息。
在SDK调用中,一般都是使用ak sk来发起调用,无需再自己编写向IAM获取临时token的操作。
由于MRS服务是region级服务, 我们只需要创建BasicCredentials即可(如果是region级服务的调用需要使用GlobalCredetials,比如EPS等)
BasicCredentials auth = new BasicCredentials()
.withAk(你的AK)
.withSk(你的SK)
.withProjectId(你的projectId);
ak 和sk可以在用户右上角的认证凭据中创建,或者通过IAM的API进行创建。
创建永久访问密钥
需要注意的是,生产实践中 ak sk应当密文存放,使用时再解密,确保安全。
创建初始连接配置
生产实践中,很少使用默认配置,一般都会设置一定的超时时间等
HttpConfig httpConfig = HttpConfig.getDefaultHttpConfig();
我们可以在HttpConfig代码中查看有哪些可以设置的参数,使用builder模式进行配置。
常见的几个有:
- 超时时间
HttpConfig httpConfig = HttpConfig.getDefaultHttpConfig().withTimeout(60);
- 网络代理。如果你是在封闭的内部开发环境上,试图访问华为云的api,一般都需要配置相关代理才能从sdk中正常访问。
// 根据需要配置网络代理,网络代理默认的协议为 `http` 协议
HttpConfig httpConfig = HttpConfig.getDefaultHttpConfig()
// 请根据实际情况替换示例中的代理地址和端口号
.withProxyHost("你的代理域名")
.withProxyPort("你的代理端口")
// 如果代理需要认证,请配置用户名和密码
.withProxyUsername(System.getenv("PROXY_USERNAME"))
.withProxyPassword(System.getenv("PROXY_PASSWORD"));
- SSL配置,防止拦截
为了避免调用过程被中间人恶意攻击进行拦截,可以配置SSL认证
// 自定义SSLSocketFactory和TrustManager,需要用户自行实现
HttpConfig httpConfig = HttpConfig.getDefaultHttpConfig()
.withSSLSocketFactory(sslSocketFactory)
.withX509TrustManager(trustManager);
这部分和常见的HTTP客户端设置ssl和trust信任内容类似,这里不再详述。
创建客户端
创建客户端就非常简单了,将上面的认证凭据和http配置用于客户端构建即可
MrsClient client = MrsClient.newBuilder()
.withCredential(auth)
.withHttpConfig(httConfig)
.build();
需要注意的是你要使用的是MRS服务哪个版本的API。
如果是V1的API,MrsClient在import时选择的应该是com.huaweicloud.sdk.mrs.v1这个包路径下的。
如果是V2的API,则就是com.huaweicloud.sdk.mrs.v2包路径下的,否则后面可能会发现找不到对应API的调用方法。
发起调用
我们无需去官网文档特地查找api的url是什么,亦或是请求体的参数叫什么名字。
在SDK中都可以直接使用,各个api,都会提供符合规范的方法名直接调用。
比如我希望查询running状态的集群列表,直接在请求里设置集群状态,并调用客户端里的listClusters方法即可:
MrsClient client = MrsClient.newBuilder()
.withCredential(auth)
.withRegion(MrsRegion.valueOf("cn-north-4"))
.build();
ListClustersRequest request = new ListClustersRequest();
request.withClusterState("running");
try {
ListClustersResponse response = client.listClusters(request);
System.out.println(response.toString());
} catch (ConnectionException e) {
// 连接失败,一般需要检查网络或者代理配置
} catch (RequestTimeoutException e) {
// 连接超时,同样检查网络
} catch (ServiceResponseException e) {
// API响应异常,可以打印此时的状态码、错误消息、请求ID等
System.out.println(e.getHttpStatusCode());
System.out.println(e.getRequestId());
System.out.println(e.getErrorCode());
System.out.println(e.getErrorMsg());
}
当我们调用过程发生异常时,请尽量打印出ServiceResponseException里的requestId,方便联系MRS服务的运维人员进行该请求的定位和排查。
更精细化的调用过程
上述直接调用listClusters时使用的是默认的发送逻辑和配置。
如果希望做更多定制化的处理,需要改成使用
client.listClustersInvoker(request)*
来创建自定义请求过程,并进行相应的逻辑拼接。
例如我们可以在invoker后面自定义相应的请求头修改返回的语言:
ListClustersResponse response = client.listClustersInvoker(request)
// 自定义请求头
.addHeader("X-Language", "zh-cn")
.invoke();
也可以设置请求的重试逻辑:
ListClustersResponse response = client.listClustersInvoker(request)
.retryTimes(重试次数,最大30次)
.retryCondition(
(resp, ex) -> (针对返回值和异常判断的重试条件))
.invoke();
其他
另外,如果需要更详细的指导,可以学习官方资料SDK概述中的内容, 或者使用API Explore来进行简单sdk示例的自动生成。
总而言之,华为云SDK的易用性对于我们的开发工作会带来极大的效率提升,使繁琐的API调用开发变得简单易行,无论你是在构建复杂的企业级应用还是简单的个人项目,华为云SDK都将是你上云之路的可靠伙伴。
- 点赞
- 收藏
- 关注作者
评论(0)