这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
今天主要记录的是分布式定时任务那些事儿之一
定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
首先介绍发展历程
Windows批处理
Case1:10分钟后Windows电脑自动关机
- Step1:桌面空白处右键单击-新建-文本文档
- Step2:更改文件名和后缀为“自动关机.bat”
- Step3:修改文件内容为“shutdown -s -t 600”,代表10分钟后关机
- Step4:双击运行该批处理文件,电脑将会在10分钟之后自动关机
Windows任务计划程序
Case2:每天12:00自动疫情打卡
- Step1:我的电脑右键单击-管理
- Step2:打开Windows任务计划程序,新建一个任务,设定执行命令
- Step3:该命令可由Python脚本编写,抓取任务请求,注册进任务请求
Linux命令-CronJob
Case3:每天02:30定时清理机器日志
- *min(0-59) *hour(0-23) *day of month(1-31) *month(1-12) *day of week(0-6) command to exceeded
- 如30 2 * * * clean_log.sh
- Linux系统命令,使用简单,稳定可靠
- 只能控制单台机器,且无法适用于其他操作系统
单机定时任务-Timer、Ticker
Case4:每隔5分钟定时刷新本地缓存数据
- Java:
public static void main(String[] args) throws ParseException {
Timer timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run(){
SyncLocalCache();
}
}, 5000, 5 * 60 * 1000);
}
- Go:
func main(){
ticker := time.NewTicker(S * timer.Minute)
for {
select {
case <-ticker.C:
SynclocalCache()
}
}
}
- 跨平台
- 仅单机使用
单机定时任务-ScheduledExecutorService
Case5:每隔5分钟定时执行多个任务
private static ScheduledExecutorService scheduler;
public static void main(String[] args) throws Exception {
Scheduler = Executors.newScheduledThreadPool(5);
scheduler.scheduleAtFixedRate(({
new Runnable() {
@Override
public void run(){
DoSomething();
}
})),
0, 300,
TimeUnit.SECONDS);
}
- 拥有线程池功能
- 仅单机使用
任务调度-Quartz
分布式定时任务
用多台机器整体协调完成分布式定时任务
这是一个平台,可以分布式部署,性能大幅提高,支持大数据,详细技术等部分在下一篇笔记中介绍