微服务平台 TSF TCT 任务迁移 XXL-JOB 通用指引

分布式任务调度(TCT)在公有云下架,协助客户完成下架迁移至替代开源产品 XXL-JOB 。

相关产品
微服务平台 TSF 产品页,含版本规格、价格与购买入口。

注意:说明:

注意:由于产品策略调整, 分布式任务调度(TCT)将于北京时间2025年12月30日正式下线。为避免影响用户的业务运行,这篇提供 TCT 任务迁移至同类开源工具 XXL-JOB 的通用指引,协助用户完成过渡。

一、TCT 和 XXL-JOB 功能清单

TCT 模块 功能点 XXL-JOB 说明
任务管理 新建/编辑/删除/启用/停用 ✓ –
任务触发 手动触发任务执行一次 ✓ –
 周期触发 ✓ –
 定时触发 ✓ –
 工作流触发 × –
任务调度/执行 Java类型任务 ✓ –
 随机单节点执行 ✓ –
 广播执行 ✓ –
 分片执行 ✓ XXL-JOB 不支持配置分片数
 任务超时设定 ✓ –
 失败重试 ✓ –
 任务参数传递 ✓ –
 分片任务参数传递 ✓ –
 分片任务单机并发控制 × –
 手动重新执行失败任务 × –
 停止任务 ✓ –
 分片子任务失败断点续跑 × –
工作流管理 新建/编辑/删除/启用/停用 × XXL-JOB 可通过父子任务实现简单任务编排
执行记录 搜索/查看任务执行记录 ✓ –
 搜索/查看工作流执行记录 × –
 执行记录过期自动清理 × XXL-JOB 支持手动批量清理
执行日志 查看任务执行日志 ✓ –
监控告警 任务失败告警 ✓ –
 工作流失败告警 × –
认证鉴权 执行器注册 Token 认证 ✓ –
 用户登录认证 ✓ –
 用户资源鉴权 ✓ XXL-JOB 仅支持执行器资源维度鉴权

注意:XXL-JOB 支持父子任务,对于不涉及原 TCT 工作流逻辑节点的简单工作流可以在 XXL-JOB 中通过父子任务实现简单任务编排

二、部署 XXL-JOB 调度中心

用户可根据自己的网络和机器资源自行规划配置,参考 XXL-JOB 页面分布式任务调度平台 XXL-JOB部署即可。以下规划选项供参考:

资源清单(推荐):

模块 副本数 节点规格 部署模式
调度中心 2 4c8g 集群部署
数据库MySQL 2 4c8g 主从部署
CLB – – –

部署架构(推荐):

CLB 可选,执行器可直连多个调度器节点。部署完成后,访问 XXL-JOB 控制台页面验证部署成功。

三、TCT 任务改造

TCT 以 Java 类为单位开发任务,在新建/编辑任务时输入完整类名识别任务。

XXL-JOB 同时支持类任务和方法任务,因此在我们既可以 TCT 任务类改造为 XXL-JOB 任务,也可以将其改造为任务方法。

我们保持 TCT 任务使用习惯以一个例子来说明 TCT 任务类改造为 XXL-JOB 任务类流程(用户也可参考 XXL-JOB 产品文档将其改造为方法),一个典型的 TCT 任务实现如下:

/** * 模拟简单的任务, 执行时间在10s ~ 15s之间, 可以终止。 */@Componentpublic class SimpleLogExecutableTask implements ExecutableTask, TerminableTask { @Override public ProcessResult execute(ExecutableTaskData taskData) { ProcessResult result = new ProcessResult(); try { LogReporter.log(taskData, "start to execute SimpleLogExecutableTask…"); LogReporter.log(taskData, "hello, this is a demo for SimpleLogExecutableTask"); long sleepTime = RandomUtils.nextLong(10000, 15000); Thread.sleep(sleepTime); result.setResultCode(ProcessResultCode.SUCCESS); } catch (InterruptedException e) { result.setResultCode(ProcessResultCode.TERMINATED); LogReporter.log(taskData, "task is terminated… "); } catch (Throwable t) { result.setResultCode(ProcessResultCode.FAIL); } return result; } @Override public TerminateResult cancel(TaskExecuteFuture future, ExecutableTaskData taskData) { LogReporter.log(taskData, "task start to cancel"); future.cancel(true); LogReporter.log(taskData, "task cancel success"); return TerminateResult.newTerminateSuccessResult(); }}

以 Maven 项目为例,在 POM 中引入 xxl-job-core 依赖:

<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>3.1.0</version> </dependency>

修改 TCT 任务实现为 XXL-JOB 的实现, 将其中实现 ExecutableTask 的方式修改为继承 自"com.xxl.job.core.handler.IJobHandler"的JobHandler类,实现 execute 方法。

public class SimpleLogExecutableTask extends IJobHandler { public void execute() { try { String param = XxlJobHelper.getJobParam(); XxlJobHelper.log("xxl job param: {}", param); XxlJobHelper.log("start to execute SimpleLogExecutableTask…"); XxlJobHelper.log("hello, this is a demo for SimpleLogExecutableTask"); long sleepTime = RandomUtils.nextLong(10000, 15000); Thread.sleep(sleepTime); } catch (InterruptedException e) { XxlJobHelper.log("task is terminated… "); } catch (Throwable t) { XxlJobHelper.log("task is failed… "); } }}

手动通过如下方式注入到执行器容器:

 @PostConstruct public void registerJobHandlers() { XxlJobExecutor.registJobHandler("SimpleLogExecutableTask", new SimpleLogExecutableTask()); }

完整代码请单击跳转参考示例。

注意:在实现任务终止时,TCT 任务提供了 cancel 接口接收任务终止指令,但是 XXL-JOB 中没有类似接口,XXL-JOB 任务终止指令是向任务执行线程发送 interrupt 信号,如果 XXL-JOB 任务内部未捕获该异常或是 catch 到了该异常并消化掉的话, 任务终止功能将不可用。

四、执行器部署

执行器配置如下:

### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin### 调度中心通讯TOKEN [选填]:非空时启用;xxl.job.admin.accessToken=default_token### 调度中心通讯超时时间[选填],单位秒;默认3s;xxl.job.admin.timeout=3### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册xxl.job.executor.appname=xxl-job-executor-sample### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。xxl.job.executor.address=### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯使用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";xxl.job.executor.ip=### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;xxl.job.executor.port=9999### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;xxl.job.executor.logretentiondays=30

关键配置说明:

配置项 说明
xxl.job.admin.addresses 调度中心地址,如果使用了 LB 则填入 LB 地址。
xxl.job.admin.accessToken 需要和服务端保持一致。调度中心和执行器,如果需要正常通讯,只有两种设置:设置一:调度中心和执行器,均不设置 AccessToken,关闭安全性校验;设置二:调度中心和执行器,设置了相同的 AccessToken。
xxl.job.executor.appname 分组依据。相同 appname 的执行器视为同一个分组,限定了分片/广播任务调度时作用域。类似 TCT 部署组概念。
xxl.job.executor.address 执行器 HTTP 服务地址,用于接收调度中心请求。
xxl.job.executor.port 执行器 HTTP 服务端口,用于接收调度中心请求。

五、创建 XXL-JOB 任务

登录 XXL-JOB 控制台,默认账号 admin/123456,新建 XXL-JOB 任务与如下 TCT 任务有相同配置:

验证任务可以成功执行:

六、TCT 任务迁移

按照以上步骤改造完成后,可灰度迁移。以迁移 TSF 部署组 A 下所有任务和执行器为例,步骤如下:

1. 按照以上步骤改造 TSF 部署组A下 TCT 执行器为 XXL-JOB 类型执行器并部署注册;

2. 新建 XXL-JOB 任务(注意与原 TCT 任务同名同配置)并停用;

3. 手动测试验证 XXL-JOB 任务正常执行;

4. 启用 XXL-JOB任务,停用 TCT 任务;

5. 业务观察一段时间(比如一周),如无问题,可删除所有 TCT 任务,并下线 TSF 部署组A下所有执行器。

赞 (0)
上一篇 4天前
下一篇 4天前