如何在SchedulerX 2.0平台上托管XXL-JOB任务

阿里巴巴商业化任务调度平台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还支持一次性任务,可以指定某个时刻执行一次任务,执行完任务自动销毁,适用于定时通知、订单定时关闭等场景。

丰富的可视化能力

  • 查看用户大盘1
  • 查看任务历史记录2
  • 查看用户运行日志3
  • 查看任务运行堆栈4
  • 查看任务操作记录5

高级特性

  • 任务编排
    支持工作流(DAG)进行任务编排,可通过拖拽对前端进行操作。详细的任务状态图方便您一目了然地看到下游任务为什么没有执行。6
  • 限流

    常见场景是夜间离线报表业务,比如很多报表任务是凌晨1点或者2点开始,要控制应用最大并发的任务数量(否则业务无法支撑),达到并发上限的任务会在队列中等待。同时要求早上9点前必须完成KPI报表,可以设置KPI任务高优先级,会抢占低优先级任务优先调度。

    SchedulerX 2. 0支持可抢占的任务优先级队列,只需要在控制台进行配置即可。

    7
  • 资源隔离

    支持命名空间和应用级别资源隔离,支持多租户权限管理。

商业化报警运维

  • 报警
    支持通过邮件、钉钉、短信或电话进行任务执行失败、超时和无可用机器报警通知。报警内容可以简单的看出任务失败的原因。1
  • 运维操作
    支持原地程序运行、重刷数据、标记成功、查看堆栈、停止任务和指定机器等。2

与开源XXL-JOB的区别

与开源XXL-JOB的区别入如下表所示。
功能开源XXL-JOBSchedulerX为底座的XXL-JOB任务
Bean模式不兼容新版本@XxlJob注解和老版本@JobHandler注解同时兼容@XxlJob注解和@JobHandler注解
GLUE(Java)对错
Shell对对
Nodejs对对
HTTP错对
单机对对
分片广播对对
路由策略第一个、最后一个、轮询、随机等轮询
定时croncron、fixed_rate、fixed_delay、one_time
工作流错对
运维操作运行一次运行一次、原地重跑、重刷数据、标记成功、停止运行
报警邮件邮件、钉钉群、短信、电话

接入方法

接入配置

将com.xuxueli:xxl-job-core的依赖删除,增加SchedulerX客户端的依赖和插件:com.aliyun.schedulerx:schedulerx2-plugin-xxljob。下面以schedulerx2-spring-boot-starter接入为例:

说明 因为XXL-JOB在2.3.x版本重构了接口,所以您需要根据XXL-JOB版本选择不同的接入方式。
  • 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工程,新建方法任务代码如下图所示:1
    控制台新建任务。1
    手动运行一次,可以打印任务参数。2
  • @JobHandler类注解
    新建代码如下:4
    控制台新建任务如下:5
    成功打印任务参数。6
  • 分片广播
    以XXL-JOB方法注解为例,新建代码如下:6
  • 控制台新建任务。7
  • 启动2个客户端实例并运行一次,分别打印。8

XXL-JOB批量迁移工具

  • 导出XXL-JOB任务配置
    1. 下载工具
    2. 解压工具包,在application.properties文件中进行导出配置。9
      ### 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
    3. 执行./start.sh命令运行导出操作。11
    4. 执行完成后,在当前目录下获得xxljob_*******.json的任务配置文件(仅Bean模式的任务配置信息)。
  • 任务导入SchedulerX
    1. 登录SchedulerX控制台,单击任务管理菜单,选择应用 > 导入任务12
    2. 选择XXL-JOB任务配置中导出的任务配置文件执行导入,即可完成XXL-JOB任务配置信息至SchedulerX任务配置信息同步。