xxl-job 分布式任务调度平台

552 阅读6分钟

1.概述

XXL-JOB是一个轻量级分布式任务调度平台、轻量级、开箱即用。

2、下载地址

GitHub地址:github.com/xuxueli/xxl…

Gitee地址:gitee.com/xuxueli0323…

官方文档:www.xuxueli.com/index.html

3、数据库生成

将下载下来的xxl-job项目使用开发工具IDEA或者myeclipse打开,如下图

image.png

然后将tables_xxl_job.sql数据sql语句在navicate下生成数据表,数据库名为:xxl_job,完成后下过如下:

image.png

4、数据源设置

打开xxl-job-admin模块,在application.properties中进行后台的配置 要设置任务执行错误提醒 可以设置邮件地址

image.png

5、启动

然后我们启动XxlJobAdminApplication类,访问http://localhost:8080/xxl-job-admin 默认账户admn,密码123456

image.png

image.png

6、操作例子

项目有个springboot案例:定位到springboot模块下的jobhandler层下面

image.png

然后我们编写一个自己的定时任务来测试

/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
    System.out.println("XXL-JOB, Hello World.");
    for (int i = 0; i < 5; i++) {
        XxlJobHelper.log("XXL-JOB, Hello World:" + i);
        TimeUnit.SECONDS.sleep(2);
    }
}

然后启动测试的项目端口是8081

image.png

7、配置执行器

1)AppName:是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;

2)名称:执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;

3)排序: 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;

4)注册方式:调度中心获取执行器地址的方式,
    自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址;
    手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;

5)机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;

image.png

8、 在任务管理里面新增任务

1)执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 "执行器管理" 进行设置。

2)任务描述:任务的描述信息,便于任务管理;

3)路由策略:当执行器集群部署时,提供丰富的路由策略,包括;
      FIRST(第一个):固定选择第一个机器;
      LAST(最后一个):固定选择最后一个机器;
      ROUND(轮询):;
      RANDOM(随机):随机选择在线的机器;
      CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
      LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
      LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
      FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
      BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
      SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

4)Cron:触发任务执行的Cron表达式;
  运行模式:
      BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" 属性匹配执行器中任务;
      GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;
      GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "shell" 脚本;
      GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "python" 脚本;
      GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" 脚本;
      GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" 脚本;
      GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" 脚本;

5)JobHandler:运行模式为 "BEAN模式" 时生效,对应执行器中新开发的JobHandler类“@JobHandler”注解自定义的value值;

6)阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
      单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
      丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
      覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;

  子任务:每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。
  任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
  失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
  报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔;
  负责人:任务的负责人;
  执行参数:任务执行所需的参数,多个参数时用逗号分隔,任务执行时将会把多个参数转换成数组传入;

image.png

9、执行任务

image.png

10、查看效果

image.png

11、后台日志

image.png

12、查看日志

我们上面配置任务时的cron表达式是每秒钟执行一次(0/1 * * * * ? *) 只有通过 XxlJobLogger.log() 代码才能将日志打印到上面。

image.png