这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
前言
主要是预习一下明天的课程,顺便写一下自己之前了解的东西,代码有一些不是用go语言
课程概述
本节课程主要分为五个方面:
- 分布式定时任务整体架构
- 控制台Admin详细设计
- 触发器Trigger详细设计
- 调度器Scheduler详细设计
- 执行器Executor详细设计
课前
分布式定时任务发展历史
- Linux命令-CronJob
- 单机定时任务-Timer、Ticker
- 单机定时任务-ScheduledExecutorService
- 任务调度- Quartz
- 分布式定时任务
1. Linux命令-CronJob
Cron: Cron来自chron,它是希腊语“ time”的前缀。Cron是在系统启动时运行的守护程序。
Crontab: Crontab(CRON TABle)是一个文件,其中包含要在指定时间运行的cron条目的时间表。文件位置因操作系统而异。
即cron是工具的名称,crontab通常是列出cron将要执行的作业的文件,而这些工作是令人惊讶的惊喜cronjob
2.单机定时任务-Timer、Ticker
例:每隔5min定时刷新本地缓存数据
func main(){
ticker := time.NewTicker(5 * time.Minute)
for {
select {
case <- ticker.C:
SyncLocalCache()
}
}
}
优缺点
- 跨平台
- 仅单机可用
3. 单机定时任务-ScheduledExcutorService
例:
public static void main(String[] args) {
scheduleTest();
//scheduleFixedRate();
//scheduleWithFixedDelay();
}
//schedule()的用法,可以对任务进行延迟处理
static void scheduleTest(){
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
//获取当前时间
long cur = System.currentTimeMillis();
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
//当前任务执行时候,对应的时间
System.out.println("延迟了"+(System.currentTimeMillis() - cur) + "ms");
}
},3000, TimeUnit.MILLISECONDS);
scheduledExecutorService.shutdown();
}
4. 任务调度- Quartz
例:创建调度器、jobDetail 实例、trigger 实例、执行
public static void main(String[] args) throws Exception {
// 1.创建调度器 Scheduler
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
// 2.创建JobDetail实例,并与MyJob类绑定(Job执行内容)
JobDetail job = JobBuilder.newJob(MyJob.class)
.withIdentity("job1", "group1")
.build();
// 3.构建Trigger实例,每隔30s执行一次
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(30)
.repeatForever())
.build();
// 4.执行,开启调度器
scheduler.scheduleJob(job, trigger);
System.out.println(System.currentTimeMillis());
scheduler.start();
//主线程睡眠1分钟,然后关闭调度器
TimeUnit.MINUTES.sleep(1);
scheduler.shutdown();
System.out.println(System.currentTimeMillis());
}
运行结果
最后一个是这节课学习的内容,我个人理解是分布式的多主机的定时任务
分布式定时任务核心架构(对于这个不是很了解)
- 控制台Admin
- 触发器Trigger
- 调度器Scheduler
- 执行器Executor
知识点扩充
- 时间轮(陌生)
- 延时消息(听说过)
-
离线计算引擎 Hive
- 大数据技术课本里学过,老朋友了
- 实时计算引擎 Flink
- 大数据技术课本里学过,老朋友了
本次预习就到这里,期待明天的课