Java教程:什么是分布式任务调度?怎样实现任务调度?

通常任务调度的程序是集成在应用中的,比如:优惠卷服务中包括了定时发放优惠卷的的调度程序,结算服务中包括了定期生成报表的任务调度程序,由于采用分布式架构,一个服务往往会部署多个冗余实例来运行我们的业务,在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度,如下图:

Java教程:什么是分布式任务调度?怎样实现任务调度?

不管是任务调度程序集成在应用程序中,还是单独构建的任务调度系统,如果采用分布式调度任务的方式就相当于将任务调度程序分布式构建,这样就可以具有分布式系统的特点,并且提高任务的调度处理能力:

1、并行任务调度

并行任务调度实现靠多线程,如果有大量任务需要调度,此时光靠多线程就会有瓶颈了,因为一台计算机CPU的处理能力是有限的。

如果将任务调度程序分布式部署,每个结点还可以部署为集群,这样就可以让多台计算机共同去完成任务调度,我们可以将任务分割为若干个分片,由不同的实例并行执行,来提高任务调度的处理效率。

2、高可用

若某一个实例宕机,不影响其他实例来执行任务。

3、弹性扩容

当集群中增加实例就可以提高并执行任务的处理效率。

4、任务管理与监测

对系统中存在的所有定时任务进行统一的管理及监测。让开发人员及运维人员能够时刻了解任务执行情况,从而做出快速的应急处理响应。

5、避免任务重复执行

当任务调度以集群方式部署,同一个任务调度可能会执行多次,比如在上面提到的电商系统中到点发优惠券的例子,就会发放多次优惠券,对公司造成很多损失,所以我们需要控制相同的任务在多个运行实例上只执行一次。

public static void main(String[] args) { //任务执行间隔时间 final long timeInterval = 1000; Runnable runnable = new Runnable() { public void run() { while (true) { //TODO:something try { Thread.sleep(timeInterval); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Thread thread = new Thread(runnable); thread.start(); }

上面的代码实现了按一定的间隔时间执行任务调度的功能。

Jdk也为我们提供了相关支持,如Timer、ScheduledExecutor,下边我们了解下。

Timer方式实现:

public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { //TODO:something } }, 1000, 2000); //1秒后开始调度,每2秒执行一次 }

Timer 的优点在于简单易用,每个Timer对应一个线程,因此可以同时启动多个Timer并行执行多个任务,同一个Timer中的任务是串行执行。

ScheduledExecutor方式实现:

public static void main(String [] agrs){ ScheduledExecutorService service = Executors.newScheduledThreadPool(10); service.scheduleAtFixedRate( new Runnable() { @Override public void run() { //TODO:something System.out.println(“todo something”); } }, 1, 2, TimeUnit.SECONDS); }

Java 5 推出了基于线程池设计的 ScheduledExecutor,其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。

Timer 和 ScheduledExecutor 都仅能提供基于开始时间与重复间隔的任务调度,不能胜任更加复杂的调度需求。比如,设置每月第一天凌晨1点执行任务、复杂调度任务的管理、任务间传递数据等等。

第三方Quartz方式实现,项目地址:

https://github.com/quartz-scheduler/quartz

Quartz 是一个功能强大的任务调度框架,它可以满足更多更复杂的调度需求,Quartz 设计的核心类包括 Scheduler, Job 以及 Trigger。其中,Job 负责定义需要执行的任务,Trigger 负责设置调度策略,Scheduler 将二者组装在一起,并触发任务开始执行。Quartz支持简单的按时间间隔调度、还支持按日历调度方式,通过设置CronTrigger表达式(包括:秒、分、时、日、月、周、年)进行任务调度。

下边是一个例子代码:

public static void main(String [] agrs) throws SchedulerException { //创建一个Scheduler SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); //创建JobDetail JobBuilder jobDetailBuilder = JobBuilder.newJob(MyJob.class); jobDetailBuilder.withIdentity(“jobName”,“jobGroupName”); JobDetail jobDetail = jobDetailBuilder.build(); //创建触发的CronTrigger 支持按日历调度 CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity(“triggerName”, “triggerGroupName”) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule(“0/2 * * * * ?”)) .build(); scheduler.scheduleJob(jobDetail,trigger); scheduler.start(); } public class MyJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext){ System.out.println(“todo something”); } }

通过以上内容我们学习了什么是任务调度,任务调度所解决的问题,以及任务调度的多种实现方式。

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程:什么是分布式任务调度?怎样实现任务调度? https://www.dachanpin.com/a/cyfx/10618.html

(0)
工作三年后,我开始后悔毕业时的选择
上一篇 2023-05-12 02:00:50
下一篇 2023-05-12 02:01:56

相关推荐

  • 马云非洲分享创业经验:中国上网第7人 一个网页开3个半小时

    第一站,马云来到肯尼亚首都内罗毕当地的创业孵化中心Nailab,向当地的年轻创业者们介绍了中国互联网的创业经验。 这是马云第一次到访非洲,当地年轻人的创业热情超出了他的想象。在谈到创业环境时,马云分享了当年创业的一些趣事。 微信公众号搜索” 驱动之家 “加关注,每日最新的手机、电脑、汽车、智能硬件信息可以让你一手全掌握。推荐关注!【微…

    2023-05-18
    134
  • 出海创业今非昔比,我们共同探讨了这 5 个关键问题

    内容|「X · 36under36」x「超级会氪厅」出海沙龙 整理|郭允骁 8 月 19 日,36 氪「X · 36under36」x「超级会氪厅」,举办 ” 多元出海,征战全球 ” 线下专场精品沙龙,沙龙邀请深耕出海领域多年的创业者(X36 出海领域上榜者)、投资人以及平台方参与,以圆桌论坛 + 分组讨论的形式展开一场深度社交式讨论…

    创业分享 2023-05-10
    247
  • 建科机械登陆创业板,加码智造拥抱新基建

      募资加码智能制造,   深耕数控钢筋加工装备,助力国内外大型基建   建科机械未来将以成为集研发、生产、专业软件开发、销售为一体的全球一流数控钢筋加工装备供应商为发展目标,打造数控钢筋加工装备产业化基地,进一步稳固公司在国内同行业的领军地位。 (责任编辑:admin) 光剑挥砍转场速成教程 2026年贵阳积家手表保养推荐:三大服务商评测精准运维避坑 DN…

    创业分享 2023-05-11
    224
  • 大学生怎样创业?他建千所图书馆帮助“儿时的自己”

    鲜为人知的是,该项目发起人刘楠鑫和他的小伙伴们曾经也是“留守儿童”。近日,在接受记者采访时,刘楠鑫说:“正因为我们都是留守儿童,我们一定是全天下公益群体中最懂自己受助群体的。” 没有父母陪伴,没有伙伴玩耍,喜欢历史故事的刘楠鑫常常自己捏几十上百个泥人,扮演军事家指挥打仗。夏日晚上,他喜欢躺在地上看星星,身旁萤火虫飞舞,周围莽莽大山,刘楠鑫渴望长大后也能走到山…

    创业分享 2023-05-12
    434
  • 刘雁南:如何跳过创业中的那些坑?

    从风控的角度来看,目前P2P的风险主要有三个:道德风险、流动性风险和由大额标的产生的坏账风险。 过去几个月,业界和媒体圈有很多关于我何去何从的猜测,作为一个刚刚创业3年的年轻人,受宠若惊。经过几个月的缄默,我终于可以告诉大家,有利网的分拆已经完成,我带领着600个小伙伴继承了原来有利网的二手车消费金融业务,同时在开拓其他消费金融业务。 我希望“以个人金融服务…

    创业分享 2023-05-21
    148

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息