任务调度是日常开发中非常常见的一个业务场景,我们经常需要去运行一些周期性、指定时间点等方式自动触发的异步业务逻辑;
集中式任务调度与分布式任务调度切好相反的概念,集中式任务就是单机任务,一个项目,一台机器,也就是我们常说的单体应用;
对于集中式任务,也就是我们Java开发中常见的定时任务。
定时任务是指在指定的时间、指定的频率去执行任务(业务代码)
轮训 + 线程休眠的方式实现定时任务;
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
ScheduledExecutorService是从jdk1.5开始作为并发工具类被引入,是最理想的定时任务实现方式。它只能实现周期性任务,不能执行定时任务
Quartz是一个开源的定时任务调度框架,由Java编写而成,用于Java生态下的定时任务调度,是一个灵活方便、使用简单的定时任务调度框架,可以和Spring整合使用。
Spring框架提供的轻量级定时任务调用工具,使用方便;
底层依然是使用Spring Task;
分布式集群的模式下,如果采用集中式的任务调度方式,会带来一些问题,比如
由于集中式的定时任务调度需要解决一系列问题,所以在演进的过程中产生一些解决办法:
TBSchedule、Elastric-Job、Saturn、XXL-JOB、Google Cron系统
淘宝退出的开源的分布式任务调用系统,在很多互联网公司拟应用很广,但现在没有维护了,现在是ScheduleX
当当网推出的分布式任务调度框架,官网:http://elasticjob.io
有很多的公司使用。
唯品会推出的开源分布式任务调度平台,它是基于Elastic-Job开发的,新增了一些特性,在唯品会内部及一些互联网公司使用
是美团开源的轻量级分布式任务调度平台,其核心设计目标是轻量级、易扩展、开发迅速、开箱即用,已有多家公司线上产品采用了xxl-job
该项目于2015年11月发布了第一个版本1.0,目前最新版本2.2.0
Github:https://github.com/xuxueli/xxl-job
Gitee:http://gitee.com/xuxueli0323/xxl-job
官网:https://www.xuxueli.com/xxl-job/
一致性hash算法参考:详解一致性hash算法
xxl-job是基于SpringBoot开发,所以可以直接编译jar执行,页面使用framemaker开发,可以根据实际场景进行二次开发扩展
docker pull xuxueli/xxl-job-admin:2.3.0
创建容器
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull --spring.datasource.username=demo --spring.datasource.password=123456 " \
-p 6767:8080 --name xxl-job-admin \
--net=mynet \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
-d xuxueli/xxl-job-admin:2.3.0
注意:第二条命令的ip和password需要更改为自己的,并且,我开的是6767端口
如果是ARM aarch64架构
# 拉获镜像
docker pull h295203236/xxl-job-admin:2.3.0-aarch64
# 创建容器
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://mysql-8:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull --spring.datasource.username=root --spring.datasource.password=123456 " \
-p 6767:8080 --name xxl-job-admin \
--net=mynet \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
-d h295203236/xxl-job-admin:2.3.0-aarch64
http://192.168.0.44:6767/xxl-job-admin
用户名密码:admin/123456,数据存储在xxl_job_user表中