Skip to content

Latest commit

 

History

History
101 lines (67 loc) · 4.44 KB

生产环境部署.md

File metadata and controls

101 lines (67 loc) · 4.44 KB

生产环境部署

第1步:部署Server:ageiport-task-server

直接运行本项目中的单元测试时框架会将任务存储在本机内存中,因此实际在生产环境中需部署用于任务CURD的 ageiport-task-server

  1. 建立数据库表,建表脚本见:https://github.com/alibaba/AGEIPort/blob/master/ageiport-task/ageiport-task-server/src/main/resources/create_table.sql
  2. 未接触过Quark的开发者使用legacy打包方式,打出的runner包与SpringBootFatJar相同mvn package -Dmaven.test.skip=true -Dquarkus.package.type=legacy-jar
  3. 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

第2步,部署客户端

客户端是真正执行任务的应用,一般引入了processor包,并初始化了AGEIPort实例。

2-1.连接Server

在上述Server部署好后,客户端执行任务时需调用Server的接口进行任务的增删改查。

配置项:com.alibaba.ageiport.processor.core.AgeiPortOptions.taskServerClientOptions

默认有两个实现,在生产环境部署时我们使用HttpTaskServerClientOptions:

  1. 用于生产环境部署的HttpTaskServerClientOptionscom.alibaba.ageiport.processor.core.client.http.HttpTaskServerClientOptions
  2. 用于测试,无需部署的MemoryTaskServerClientOptionscom.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方案

2-2.使用文件存储

运行单元测试时框架会将生成的文件存储在本机硬盘中,实际生产中我们一般会在OSS/HDFS等存储文件

框架默认提供了AliyunOSS文件存储的插件,如果需要其他OSS或文件存储支持可参考此实现

  1. Maven依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>ageiport-ext-file-store-aliyunoss</artifactId>
</dependency>
  1. 配置及初始化,设置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);

第3步,创建任务实例并执行

场景1.单元测试执行

参考 ageiport-test-processor-core 模块的单元测试。

注意,默认配置下单元测试时框架会将任务存储在本机内存中,可参考第2步,根据测试需求配置任务和文件存储等。

主要步骤:

  1. 初始化AgeiPort实例
  2. 构造查询参数TaskExecuteParam
  3. 调用本地方法executeTask,开始执行任务,并获取任务实例ID
  4. 使用内部封装的TaskHelp方法判断任务是否执行成功

场景2.HTTP接口执行

部署了AGEIPort的客户端会自动暴露一个HTTP接口,可以供外部应用远程调用,创建任务实例并执行

可参考代码:com.alibaba.ageiport.test.processor.core.api.HttpApiTest

不建议前端直接调用此接口,而是由前端调用某个Web服务A完成鉴权和身份认证后,Web服务A构造参数调用客户端的此HTTP接口

场景3.其他RPC接口执行

接入用户可能有自己的RPC框架或服务间通信协议,如Dubbo

客户端可封装一个RPC的Provider 用来对外暴露任务执行的接口(封装 TaskService 接口)

TaskService接口的使用参考 ageiport-test-processor-core 模块的单元测试。

调用链路可能为:

  1. 前端->APIGateWay-RPC->客户端
  2. 前端->APIGateWay->其他服务-RPC->客户端