分布式任务调度平台XXL-JOB

文章目录

    • 创建简单得springboot项目如下图(传统)
  • 一、XXL-JOB是什么?
  • 二、使用步骤
    • 1. 下载源码(在官网,推荐用gitee速度快)
    • 2. 运行sql文件![在这里插入图片描述](https://img-blog.csdnimg.cn/c651ca8ef83341a78f302e9ecae8a668.png)
    • 3. 打开下载的代码并修改数据源后运行
    • 4. 登录成功后启动任务
  • 二、使用XXL-JOB自定义任务
    • 1.复制pom和yaml还有日志已经config(更改yaml配置)
  • 总结
        • 五: 任务配置详解
          • 5.1 : 路由策略
          • 5.2 : 失败重试
          • 5.3: 报警邮件配置
          • 5.4:调度过期策略
          • 5.5: 阻塞处理策略

创建简单得springboot项目如下图(传统)

分布式任务调度平台XXL-JOB_第1张图片

代码如下(示例):每隔离三秒执行一次

    @Scheduled(cron="*/3 * * * * ?")
    public void task02(){
        count = count +1;
        System.out.println(new Date() +":"+ count);
    }
//控制台结果
//Tue Aug 10 16:58:48 CST 2021:3
//Tue Aug 10 16:58:51 CST 2021:4
//Tue Aug 10 16:58:54 CST 2021:5
//Tue Aug 10 16:58:57 CST 2021:6

传统任务框架的弊端。
分布式任务调度平台XXL-JOB_第2张图片
分布式领域中服务器集群的情况下,如何保证job的幂等性?·
分布式任务调度平台XXL-JOB_第3张图片
任务异常结束怎么办?
分布式任务调度平台XXL-JOB_第4张图片
前一个任务执行超时了,下一个任务怎么办[丢了]?
没有一个友好的可视化界面

一、XXL-JOB是什么?

官网连接: https://www.xuxueli.com/xxl-job/.
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
应用场景
数据同步,清除过期用户信息,定期发送报表,消息推送等

二、使用步骤

1. 下载源码(在官网,推荐用gitee速度快)

分布式任务调度平台XXL-JOB_第5张图片
分布式任务调度平台XXL-JOB_第6张图片
在文件夹中使用git clone 下载下来

git clone https://gitee.com/xuxueli0323/xxl-job.git

2. 运行sql文件分布式任务调度平台XXL-JOB_第7张图片

运行后的数据库如下
分布式任务调度平台XXL-JOB_第8张图片

3. 打开下载的代码并修改数据源后运行

分布式任务调度平台XXL-JOB_第9张图片
进入可视化页面: http://localhost:8080/xxl-job-admin/toLogin.
分布式任务调度平台XXL-JOB_第10张图片用户名:admin 密码:123456
可以从数据库查询得到
分布式任务调度平台XXL-JOB_第11张图片

4. 登录成功后启动任务

分布式任务调度平台XXL-JOB_第12张图片
启动任务
分布式任务调度平台XXL-JOB_第13张图片
分布式任务调度平台XXL-JOB_第14张图片
分布式任务调度平台XXL-JOB_第15张图片
启动后查看执行日志
分布式任务调度平台XXL-JOB_第16张图片

二、使用XXL-JOB自定义任务

1.复制pom和yaml还有日志已经config(更改yaml配置)

分布式任务调度平台XXL-JOB_第17张图片

@Component
public class MyTask {
    private static Logger logger = LoggerFactory.getLogger(MyTask.class);

    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoMyJob")
    public void demoJobHandler() throws Exception {
        //在管理平台上打印
        XxlJobHelper.log("XXL-JOB, Hello demoMyJob.");
        //在控制台打印
        logger.info("===============Hello demoMyJob.");
        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }
}

分布式任务调度平台XXL-JOB_第18张图片
配置路由策略解决幂等性
分布式任务调度平台XXL-JOB_第19张图片

总结

五: 任务配置详解

5.1 : 路由策略
		FIRST(第一个):固定选择第一个机器;
        LAST(最后一个):固定选择最后一个机器;
        ROUND(轮询):;
        RANDOM(随机):随机选择在线的机器;
        CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
        LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
        LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
        FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
        BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
5.2 : 失败重试
  • 任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
  • 失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
5.3: 报警邮件配置

分布式任务调度平台XXL-JOB_第20张图片
分布式任务调度平台XXL-JOB_第21张图片

5.4:调度过期策略
  • 忽略:调度过期后,忽略过期的任务,从当前时间开始重新计算下次触发时间;
  • 立即执行一次:调度过期后,立即执行一次,并从当前时间开始重新计算下次触发时间;
5.5: 阻塞处理策略
  • 单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
  • 丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
  • 覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空

你可能感兴趣的:(java)