阿里巴巴商业化任务调度平台SchedulerX 2.0兼容XXL-JOB任务接口,支持@XxlJob新注解和@JobHandler老注解方式,您无需修改代码,即可以将XXL-JOB任务在SchedulerX 2.0平台上托管。本文介绍在SchedulerX 2.0平台上托管的优势和方法。
SchedulerX 2.0优势
免运维和低成本
自建XXL-JOB至少需要2个Server+1个数据库。托管XXL-JOB可以省去机器成本,省去人力运维成本。
海量任务和精准调度
开源XXL-JOB基于竞争数据库锁保证只有一个节点执行任务,对于数据库有压力。据统计,当任务超过1万,且都是分钟级别的任务时,就会有比较明显的调度延时。如果是秒级别任务,延时就更加明显。
SchedulerX 2.0采用分布式架构,不同的Server调度不同的任务,且无锁竞争,真正实现可以水平扩展,可以支持百万级别任务调度。针对秒级别任务低延时的特性,采用了专门的架构,占用资源极低,可以作为实时业务的秒级别调度场景。SchedulerX 2.0还支持一次性任务,可以指定某个时刻执行一次任务,执行完任务自动销毁,适用于定时通知、订单定时关闭等场景。
丰富的可视化能力
- 查看用户大盘
- 查看任务历史记录
- 查看用户运行日志
- 查看任务运行堆栈
- 查看任务操作记录
高级特性
- 任务编排支持工作流(DAG)进行任务编排,可通过拖拽对前端进行操作。详细的任务状态图方便您一目了然地看到下游任务为什么没有执行。
- 限流
常见场景是夜间离线报表业务,比如很多报表任务是凌晨1点或者2点开始,要控制应用最大并发的任务数量(否则业务无法支撑),达到并发上限的任务会在队列中等待。同时要求早上9点前必须完成KPI报表,可以设置KPI任务高优先级,会抢占低优先级任务优先调度。
SchedulerX 2. 0支持可抢占的任务优先级队列,只需要在控制台进行配置即可。
- 资源隔离
支持命名空间和应用级别资源隔离,支持多租户权限管理。
商业化报警运维
- 报警支持通过邮件、钉钉、短信或电话进行任务执行失败、超时和无可用机器报警通知。报警内容可以简单的看出任务失败的原因。
- 运维操作支持原地程序运行、重刷数据、标记成功、查看堆栈、停止任务和指定机器等。
与开源XXL-JOB的区别
功能 | 开源XXL-JOB | SchedulerX为底座的XXL-JOB任务 |
Bean模式 | 不兼容新版本@XxlJob 注解和老版本@JobHandler 注解 | 同时兼容@XxlJob 注解和@JobHandler 注解 |
GLUE(Java) | ||
Shell | ||
Nodejs | ||
HTTP | ||
单机 | ||
分片广播 | ||
路由策略 | 第一个、最后一个、轮询、随机等 | 轮询 |
定时 | cron | cron、fixed_rate、fixed_delay、one_time |
工作流 | ||
运维操作 | 运行一次 | 运行一次、原地重跑、重刷数据、标记成功、停止运行 |
报警 | 邮件 | 邮件、钉钉群、短信、电话 |
接入方法
接入配置
将com.xuxueli:xxl-job-core的依赖删除,增加SchedulerX客户端的依赖和插件:com.aliyun.schedulerx:schedulerx2-plugin-xxljob。下面以schedulerx2-spring-boot-starter接入为例:
- XXL-JOB2.3.x版本接入。更多信息,请参见Demo。
<!-- 注释xxl-job-core --> <!-- <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${project.parent.version}</version> </dependency> --> <dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-spring-boot-starter</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-plugin-xxljob</artifactId> <version>2.3.0</version> </dependency>
- XXL-JOB2.3.0以下版本接入,更多信息,请参见Demo。
<!-- 注释xxl-job-core --> <!-- <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${project.parent.version}</version> </dependency> --> <dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-spring-boot-starter</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-plugin-xxljob</artifactId> <version>1.3.4.1</version> </dependency>
- application.properties增加配置。
spring.schedulerx2.endpoint=xxxxxxx spring.schedulerx2.namespace=xxxxxxx spring.schedulerx2.groupId=xxxxxxxx spring.schedulerx2.appKey=xxxxxxx
创建方法任务
- @XxlJob方法注解以XXL-JOB-2.2.1接口为例,参考开源xxl-job-executor-sample-springboot工程,新建方法任务代码如下图所示:控制台新建任务。手动运行一次,可以打印任务参数。
- @JobHandler类注解新建代码如下:控制台新建任务如下:成功打印任务参数。
- 分片广播以XXL-JOB方法注解为例,新建代码如下:
- 控制台新建任务。
- 启动2个客户端实例并运行一次,分别打印。
XXL-JOB批量迁移工具
- 导出XXL-JOB任务配置
- 下载工具。
- 解压工具包,在application.properties文件中进行导出配置。
### xxl-job, datasource datasource.url=jdbc:mysql://127.0.0.1:****/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai datasource.username=**** datasource.password=****** datasource.driver-class-name=com.mysql.cj.jdbc.***** ### 配置对应要导出的app-name(该步骤可选,不设置的情况下导出所有任务分组)。 #xxl-job.app-name=xxl-job-executor-sample
- 执行
./start.sh
命令运行导出操作。 - 执行完成后,在当前目录下获得xxljob_*******.json的任务配置文件(仅Bean模式的任务配置信息)。
- 任务导入SchedulerX
- 登录SchedulerX控制台,单击任务管理菜单,选择 。
- 选择XXL-JOB任务配置中导出的任务配置文件执行导入,即可完成XXL-JOB任务配置信息至SchedulerX任务配置信息同步。