分佈式定時任務框架詳解

一、分佈式定時任務

分佈式定時任務指的是分佈式系統中,定時執行任務並且確保任務只會被一個節點執行。在分佈式系統中,由於存在多個節點同時運行同一個任務的風險,因此需要一套分佈式定時任務的解決方案。分佈式定時任務框架就應運而生。

分佈式定時任務可以分為兩種類型:

1、基於任務調度中心的分佈式定時任務。這種方式需要引入任務調度中心,可以實現任務的分配和執行監控等功能。常見的任務調度中心有Quartz、Elastic-Job等。

2、基於分佈式鎖的分佈式定時任務。這種方式需要引入分佈式鎖來保證任務只有一個節點執行。常見的分佈式鎖實現方式有Redis、Zookeeper等。

針對以上兩種類型,我們可以分別使用不同的分佈式定時任務框架進行解決。

二、分佈式任務調度框架選取

進行分佈式任務調度時,一個重要的問題是如何選擇適合自己業務的任務調度框架。

以下是三個比較流行的分佈式任務調度框架:

1、Quartz:一個功能強大的開源任務調度框架,具有可靠性高、支持集群、支持Cron表達式等特點。

    
    public class QuartzJob implements Job {

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("quartz job execute!");
    }
}
    

2、Elastic-Job:一個分佈式任務調度框架,具有高可用、在線伸縮、分片執行等特點。支持多種類型的任務,包括簡單任務、數據流作業等。

    
    public class ElasticJobSimple implements SimpleJob {

    public void execute(ShardingContext shardingContext) {
        System.out.println("elastic job execute!");
    }
}
    

3、xxl-job:一個分佈式任務調度平台,具有簡單易用、多方案、可視化、調度監控等特點。支持BEAN方式任務調度、CMD方式任務調度等。

    
    public class XxlJobTest {

    public static void main(String[] args) {

        XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();

        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();

        XxlJobSpringExecutorAutoConfiguration xxlJobSpringExecutorAutoConfiguration = new XxlJobSpringExecutorAutoConfiguration();
    }
}
    

三、分佈式定時任務框架Quartz應用實例

Quartz是一個使用廣泛的開源任務調度框架,下面通過一個簡單的定時任務實例介紹Quartz在分佈式定時任務中的應用。

1、引入依賴

    
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.3.2</version>
    </dependency>
    

2、定義定時任務實體類

    
    public class QuartzJob implements Job {

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("quartz job execute!");
    }
}
    

3、創建JobDetail和Trigger

    
    public class QuartzTest {

    public static void main(String[] args) throws Exception {

        //1、創建JobDetail
        JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity("job1", "group1").build();

        //2、創建Trigger
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
                .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND))
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();

        //3、創建Scheduler
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        //4、將JobDetail和Trigger放入Scheduler
        scheduler.scheduleJob(jobDetail, trigger);

        //5、啟動Scheduler
        scheduler.start();
    }}
    

四、分佈式定時任務框架Elastic-Job應用實例

Elastic-Job是一個基於分佈式架構的任務調度框架,下面通過一個簡單的定時任務實例介紹Elastic-Job在分佈式定時任務中的應用。

1、引入依賴

    
    <dependency>
        <groupId>com.dangdang</groupId>
        <artifactId>elastic-job-lite-core</artifactId>
        <version>2.1.6</version>
    </dependency>
    

2、定義定時任務實現類

    
    public class ElasticJobSimple implements SimpleJob {

    public void execute(ShardingContext shardingContext) {
        System.out.println("elastic job execute!");
    }
}
    

3、添加任務配置

    
    public class ElasticJobSimpleTest {

    public static void main(String[] args) {
        //1、創建JobCoreConfiguration
        JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("elasticJobSimple", "0/5 * * * * ?", 1).build();

        //2、創建SimpleJobConfiguration
        SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration, ElasticJobSimple.class.getCanonicalName());

        //3、
        LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(simpleJobConfiguration).build();

        //4、啟動任務
        new SpringJobScheduler(new ElasticJobSimple(), ZookeeperRegistryCenterFactoryBean.createRegistryCenter(), liteJobConfiguration).init();
    }}
    

五、總結

本文介紹了分佈式定時任務框架的相關知識,並分別詳細介紹了Quartz和Elastic-Job框架在分佈式定時任務中的使用。在實際使用過程中,我們需要根據業務需求選擇合適的分佈式定時任務框架,並按照框架要求實現定時任務。

原創文章,作者:EUJOJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/332136.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EUJOJ的頭像EUJOJ
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • KeyDB Java:完美的分佈式高速緩存方案

    本文將從以下幾個方面對KeyDB Java進行詳細闡述:KeyDB Java的特點、安裝和配置、使用示例、性能測試。 一、KeyDB Java的特點 KeyDB Java是KeyD…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • Saturn 定時任務用法介紹

    本文將從以下幾個方面對Saturn定時任務進行詳細的闡述: 一、Saturn 定時任務簡介 Saturn是一個分佈式任務調度系統,支持在線添加、修改定時任務,支持多種任務類型,如J…

    編程 2025-04-29
  • Java Hmily分佈式事務解決方案

    分佈式系統是現在互聯網公司架構中的必備項,但隨着業務的不斷擴展,分佈式事務的問題也日益凸顯。為了解決分佈式事務問題,Java Hmily分佈式事務解決方案應運而生。本文將對Java…

    編程 2025-04-28
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28

發表回復

登錄後才能評論