文档中心>微服务平台 TSF>操作指南>TCT 任务迁移 XXL-JOB 通用指引

TCT 任务迁移 XXL-JOB 通用指引

最近更新时间:2025-08-01 10:13:12

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

背景

分布式任务度(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之间, 可以终止。
*/
@Component
public 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下所有执行器。