本文介绍使用Java SDK的详细流程,包括环境要求、安装依赖和快速使用。
环境要求
- 要使用Alibaba Cloud SDK for Java,您需要一个云账号以及一对
AccessKey ID
和AccessKey Secret
。请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey,或者联系您的系统管理员。 - 要使用Alibaba Cloud SDK for Java访问某个产品的API,您需要事先在阿里云控制台中开通这个产品。
- Alibaba Cloud SDK for Java需要1.6以上的JDK。
安装依赖
无论您要使用哪个产品的开发工具包,都必须安装aliyun-java-sdk-core
。例如,对Serverless工作流SDK的调用,您需要安装aliyun-java-sdk-core
和aliyun-java-sdk-fnf
。
下文推荐您通过Maven来管理项目依赖。如果您使用Apache Maven来管理Java项目,只需在项目的pom.xml
文件加入相应的依赖项即可。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>[4.3.2,5.0.0)</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-fnf</artifactId>
<version>[1.0.0,5.0.0)</version>
</dependency>
如果Maven没有从中央存储库下载JAR包,则需要将此依赖项添加到pom.xml
文件中,否则将报告NoClassDefFoundError
异常。
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
快速使用
下文以创建一个流程,发起一次执行并获取执行详情为例展示如何使用Java SDK调用Serverless工作流服务。
调用Alibaba Cloud SDK for Java的3个主要步骤:
- 创建DefaultAcsClient实例并初始化。
- 创建API请求并设置参数。更多信息,请参见API概览。
- 发起请求并处理应答或异常。
注意 下文仅提供Serverless工作流产品的使用流程,如果您在使用过程中遇到调试等问题或希望使用高级功能(连接池、HTTPS、代理和日志)等功能,请参见README-CN。
请求方式
package com.test;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.fnf.model.v20190315.*;
class FnFOperations {
static String flowName = "xxx";
static String execName = "xxx";
static String flowDesc = "xxx";
static String flowDef = "xxx";
static String roleArn = "xxx";
static String flowType = "xxx";
//创建一个Serverless工作流流程。
static CreateFlowResponse createFlow(IAcsClient fnfClient) throws ClientException {
CreateFlowRequest request = new CreateFlowRequest();
request.setName(flowName);
request.setDefinition(flowDef);
request.setType(flowType);
request.setDescription(flowDesc);
request.setRoleArn(roleArn);
return fnfClient.getAcsResponse(request);
}
//发起一次执行。
static StartExecutionResponse startExecution(IAcsClient fnfClient) throws ClientException {
StartExecutionRequest request = new StartExecutionRequest();
request.setFlowName(flowName);
request.setExecutionName(execName);
return fnfClient.getAcsResponse(request);
}
//查询执行结果。
static DescribeExecutionResponse describeExecution(IAcsClient fnfClient) throws ClientException {
DescribeExecutionRequest request = new DescribeExecutionRequest();
request.setFlowName(flowName);
request.setExecutionName(execName);
return fnfClient.getAcsResponse(request);
}
//查询历史执行记录。
static GetExecutionHistoryResponse getExecutionHistory(IAcsClient fnfClient) throws ClientException {
GetExecutionHistoryRequest request = new GetExecutionHistoryRequest();
request.setFlowName(flowName);
request.setExecutionName(execName);
return fnfClient.getAcsResponse(request);
}
}
创建客户端并利用上述函数发起一系列调用
说明 如果您需要不加改造进行调试的话,请将下述public类与上述“请求方式”代码块置于同一个文件中,避免在import时报错。
public class Main {
public static void main(String[] args) {
// Create DefaultAcsClient
DefaultProfile profile = DefaultProfile.getProfile(
"<your-region-id>", // 地域ID。
"<your-access-key-id>", // RAM账号的AccessKey ID。
"<your-access-key-secret>"); // RAM账号的AccessKey Secret。
IAcsClient client = new DefaultAcsClient(profile);
try {
// Create Flow
CreateFlowResponse createFlowResponse = FnFOperations.createFlow(client);
System.out.println(creatFlowResponse);
// Start Execution
StartExecutionResponse startExeResp = FnFOperations.startExecution(client);
System.out.println(startExeResp);
// Describe Execution
DescribeExecutionResponse descExeResp = FnFOperations.describeExecution(client);
System.out.println(descExeResp);
} catch (ClientException e) {
e.printStackTrace();
}
try {
GetExecutionHistoryResponse resp = FnFOperations.getExecutionHistory(client);
for (GetExecutionHistoryResponse.EventsItem event:resp.getEvents()) {
System.out.printf("event %s status: %s%n", event.getStepName(), event.getType());
}
} catch (ClientException e) {
e.printStackTrace();
}
}
}