直接运行本项目中的单元测试时框架会将任务存储在本机内存中,因此实际在生产环境中需部署用于任务CURD的 ageiport-task-server
- 建立数据库表,建表脚本见:https://github.com/alibaba/AGEIPort/blob/master/ageiport-task/ageiport-task-server/src/main/resources/create_table.sql
- 未接触过Quark的开发者使用legacy打包方式,打出的runner包与SpringBootFatJar相同
mvn package -Dmaven.test.skip=true -Dquarkus.package.type=legacy-jar
- java -jar 运行Jar包,运行Jar包时可通过系统环境变量或JVM参数执行数据库等参数
传统jar包方式-Dockerfile
如果使用mvn package -Dmaven.test.skip=true -Dquarkus.package.type=legacy-jar
命令打包,则制品为Fatjar
使用如下Dockerfile,可从ageiport-task-server目录docker文件夹下"Dockerfile.legacy-jar"获取最新Dockerfil
客户端是真正执行任务的应用,一般引入了processor包,并初始化了AGEIPort实例。
在上述Server部署好后,客户端执行任务时需调用Server的接口进行任务的增删改查。
配置项:com.alibaba.ageiport.processor.core.AgeiPortOptions.taskServerClientOptions
默认有两个实现,在生产环境部署时我们使用HttpTaskServerClientOptions:
- 用于生产环境部署的HttpTaskServerClientOptions
com.alibaba.ageiport.processor.core.client.http.HttpTaskServerClientOptions
- 用于测试,无需部署的MemoryTaskServerClientOptions
com.alibaba.ageiport.processor.core.client.memory.MemoryTaskServerClientOptions
示例代码
AgeiPortOptions options = new AgeiPortOptions();
HttpTaskServerClientOptions clientOptions = new HttpTaskServerClientOptions();
clientOptions.setEndpoint("localhost");
options.setTaskServerClientOptions(clientOptions);
当然,你可以可以参照上述两个实现,来实现其他RPC生产环境部署的ageiport-task-server方案
运行单元测试时框架会将生成的文件存储在本机硬盘中,实际生产中我们一般会在OSS/HDFS等存储文件
框架默认提供了AliyunOSS文件存储的插件,如果需要其他OSS或文件存储支持可参考此实现
- Maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>ageiport-ext-file-store-aliyunoss</artifactId>
</dependency>
- 配置及初始化,设置FileStoreOptions
AgeiPortOptions options = AgeiPortOptions.debug();
AliyunOssFileStoreOptions aliyunOssFileStoreOptions = new AliyunOssFileStoreOptions();
aliyunOssFileStoreOptions.setBucketName(bucketName);
aliyunOssFileStoreOptions.setEndpoint(endpoint);
aliyunOssFileStoreOptions.setConfig(new ClientConfiguration());
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(credentials);
aliyunOssFileStoreOptions.setCredentialsProvider(credentialProvider);
options.setFileStoreOptions(aliyunOssFileStoreOptions);
参考 ageiport-test-processor-core 模块的单元测试。
注意,默认配置下单元测试时框架会将任务存储在本机内存中,可参考第2步,根据测试需求配置任务和文件存储等。
主要步骤:
- 初始化AgeiPort实例
- 构造查询参数TaskExecuteParam
- 调用本地方法executeTask,开始执行任务,并获取任务实例ID
- 使用内部封装的TaskHelp方法判断任务是否执行成功
部署了AGEIPort的客户端会自动暴露一个HTTP接口,可以供外部应用远程调用,创建任务实例并执行
可参考代码:com.alibaba.ageiport.test.processor.core.api.HttpApiTest
不建议前端直接调用此接口,而是由前端调用某个Web服务A完成鉴权和身份认证后,Web服务A构造参数调用客户端的此HTTP接口
接入用户可能有自己的RPC框架或服务间通信协议,如Dubbo
客户端可封装一个RPC的Provider 用来对外暴露任务执行的接口(封装 TaskService 接口)
TaskService接口的使用参考 ageiport-test-processor-core 模块的单元测试。
调用链路可能为:
- 前端->APIGateWay-RPC->客户端
- 前端->APIGateWay->其他服务-RPC->客户端