前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >新一代 Cron-Job 分布式任务调度平台 正式发布!

新一代 Cron-Job 分布式任务调度平台 正式发布!

原创
作者头像
Horace
修改于 2025-02-18 00:11:18
修改于 2025-02-18 00:11:18
16400
代码可运行
举报
运行总次数:0
代码可运行

👉项目官网: 官网入口

👉Gitee仓库: Gitee仓库入口

👉GitHub仓库: Github仓库入口

一、为什么需要分布式任务调度平台?

有一个场景,需要每天凌晨1点执行一次统计任务,一般情况下是使用分布式锁(Redis、ZK、MySQL)等方式,保证同一时刻只有一个任务执行。整个应用中如果有多个这类任务则需要重复维护,如果扩大到整个公司的业务来看,效率将是低下的,并且以下诉求很难得到满足:

  • 不支持任务参数的动态调整,例如某类任务需要根据特定参数做一些特性化事情的时候。
  • 不支持分片任务,例如某类任务需要处理的数据量很大,需要分片处理,多个系统之间的协调也是难点。
  • 较难失败重试,或失效转移,例如执行失败之后,需要重试或转移到其他节点执行。
  • 任务执行数据难以统计,任务的执行的耗时、失败次数、执行次数等,都难以统计。
  • 不支持任务的停止,例如在机房迁移等一些场景,需要暂时性的停止任务。
  • 但是 Cron-Job 可以很好的解决这些问题,并且接入简单、超低延迟、可靠性高,使用起来非常方便。

二、Cron-Job的核心优势

1. 简单易用
  • 部署简单、接入简单,只需要简单几步,即可轻松地将应用接入到 Cron-Job 分布式任务调度平台。
  • 支持任何Cron表达式的任务调度,支持常用的分片和随机策略;支持失败丢弃、失败重试的失败策略;支持动态任务参数。
2. 毫秒级的调度延迟
  • 基于提前调度策略,抹平服务器时间差、网络延迟等因素,使任务的执行更加及时,实际测试为个位数毫秒级别(执行器的GC和性能)。
  • 基于ACK确认、失败重试、过期调度等策略,使任务的执行更加准确、可靠,当然也可以通过配置不要失败重试。
3. 多租户支持

对于多业务线的企业,只需要部署一套任务调度平台,即可支撑多业务接入,且业务线权限之间互不干扰。

4. 用户体验与效率
  • 用户的接入更加简单,只需要代码上打上注解,就可以完成自动注册,不需要额外的配置,只需要点击开始即可。
  • 管理后台UI更加精美简洁,并优化了管理后台的交互逻辑,理解和使用更加简单。
  • 更加全面且有结构化的官方文档,尽可能让用户一目了然,自主接入和部署。
5. 增强横向扩展能力
  • 多租户的接入能力,只需要部署一套调度平台,即可接入公司内所有业务线。
  • 横向扩展的能力,支持集群多节点部署,即可支持更大的并发量和任务量。
6. 更安全的管理后台
  • 精心设计权限管理的功能,可控制到接口的权限级别,任务的安全性更加可靠,多租户间权限隔离。
  • 后台管理接口的交互、执行器和调度器之间的OpenApi交互,均采用签名校验机制,避免参数篡改、伪造和重放等问题。
7. 更高效的问题排查效率

管理后台提供更多维度的日志详情,能够帮助用户更好的理解任务的执行情况,并且能够更好的排查问题。

三、Cron-Job的架构

1. 模块架构
2. 部署架构

四、原生Java接入

1. 引入maven依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
同时提供有Gradle等各类依赖类型 
https://mvnrepository.com/artifact/cn.horace.cronjob/cronjob-executor 
-->
<dependency>
    <groupId>cn.horace.cronjob</groupId>
    <artifactId>cronjob-executor</artifactId>
    <version>最新版本</version>
</dependency>
2. 实现任务处理接口
代码语言:java
AI代码解释
复制
/**
 * 演示任务
 * Created in 2025-01-01 10:44.
 *
 * @author Horace
 */
@TaskConfig(name = "普通测试任务", cron = "* * * * * ? ", routerStrategy = RouterStrategy.RANDOM)
public class DemoCronTask implements TaskHandler {
    private static final Logger logger = LoggerFactory.getLogger(DemoCronTask.class);
    /**
     * 执行任务的方法
     *
     * @param params 任务参数
     * @return 任务执行结果,如果执行成功,则返回HandlerResult.success(),如果执行失败,则返回HandlerResult.fail(),返回null,也判定是失败
     */
    @Override
    public HandlerResult handle(TaskParams params) {
        logger.info("task handler..., params:{}", params);
        Random random = new Random();
        int delay = random.nextInt(50);
        LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(delay));
        return HandlerResult.success();
    }
}
3. 新建启动类
代码语言:java
AI代码解释
复制
/**
 * 示例执行器
 * <p>
 *  * @author Horace
 */
public class ExampleExecutor {
    private static final Logger logger = LoggerFactory.getLogger(ExampleExecutor.class);
    public static void main(String[] args) {
        ArrayList<Object> taskObjects = new ArrayList<>();
        taskObjects.add(new DemoCronTask());
        
        ExecutorConfig config = ExecutorConfig.Builder.newBuilder(taskObjects)
                .address("http://127.0.0.1:9527")
                .tenant("horace")
                .appName("example-executor")
                .appDesc("普通示例执行器")
                .tag("common")
                .signKey("7d890a079948b196756rtf5452d2245t")
                .build();
        CronJobExecutorClient.init(config).start();
    }
}
  • address:这里指定的是调度器的地址,如果是本地单节点测试,则指定地址+端口的方式是;如果是线上集群部署,则指定的是Nginx地址。
  • tenant:租户的代码,一般是租户的英文名称。
  • appName:应用名称,一般是应用的英文名称。
  • appDesc:应用描述,应用的中文描述,后续在管理平台中可以看到。
  • tag:标签,用于区分同个应用下的不同执行器,如无需求,则不配置即可。
  • signKey:签名密钥,用于验证执行器的身份,必须和调度器配置的签名密钥一致。

五、SprintBoot版本接入

1. 引入maven依赖
代码语言:javas
AI代码解释
复制
<!--
同时提供有Gradle等各类依赖类型 
https://mvnrepository.com/artifact/cn.horace.cronjob/cronjob-executor-starter 
-->
<dependency>
    <groupId>cn.horace.cronjob</groupId>
    <artifactId>cronjob-executor-starter</artifactId>
    <version>最新版本</version>
</dependency>
2. 实现任务处理接口
代码语言:java
AI代码解释
复制
/**
 * 演示任务
 *
 * @author Horace
 */
@Component
@TaskConfig(name = "Spring测试任务", cron = "* * * * * ? ", routerStrategy = RouterStrategy.RANDOM)
public class DemoCronTask implements TaskHandler {
    private static final Logger logger = LoggerFactory.getLogger(DemoCronTask.class);

    /**
     * 执行任务的方法
     *
     * @param params 任务参数
     * @return 任务执行结果,如果执行成功,则返回HandlerResult.success(),如果执行失败,则返回HandlerResult.fail(),返回null,也判定是失败
     */
    @Override
    public HandlerResult handle(TaskParams params) {
        logger.info("task handler..., params:{}", params);
        Random random = new Random();
        int delay = random.nextInt(200);
        LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(delay));
        return HandlerResult.success();
    }
}

注意:这里的任务类一定要打上Spring的注解,可以是@Component,把对象实例交给Spring管理。

3. 新建配置类
代码语言:java
AI代码解释
复制
/**
 * Created in 2025-01-01 21:00.
 *
 * @author Horace
 */
@Configuration
public class AppConfig {
    private static final Logger logger = LoggerFactory.getLogger(AppConfig.class);

    /**
     * 自定义配置
     *
     * @return
     */
    @Bean
    public ExecutorStarterConfig cronJobExecutorStarterConfig() {
        ExecutorStarterConfig config = new ExecutorStarterConfig();
        config.setAddress("http://127.0.0.1:9527");
        config.setTenant("horace");
        config.setAppName("example-executor-starter");
        config.setAppDesc("Spring示例执行器");
        config.setTag("common");
        config.setSignKey("7d890a079948b196756rtf5452d2245t");
        return config;
    }
}
4. 新建启动类
代码语言:java
AI代码解释
复制
/**
 * Created in 2025-01-01 21:00.
 *
 * @author Horace
 */
@EnableCronJob
@SpringBootApplication
public class ExampleSpringExecutor {
    private static final Logger logger = LoggerFactory.getLogger(ExampleSpringExecutor.class);

    public static void main(String[] args) {
        SpringApplication.run(ExampleSpringExecutor.class, args);
    }
}

注意:需要在启动类上加上@EnableCronJob注解,开启CronJob的自动配置。

放一张调度平台首页的图片~

👉项目官网: 官网入口

👉Gitee仓库: Gitee仓库入口

👉GitHub仓库: Github仓库入口

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
新一代 Cron-Job分布式调度平台,v1.0.8版本发布,支持Go执行器SDK!
- 现代化的管理后台UI更加精美简洁,并优化了管理后台的交互逻辑,理解和使用更加简单。
Horace
2025/04/17
470
新一代 Cron-Job分布式调度平台,v1.0.8版本发布,支持Go执行器SDK!
springboot整合xxl-job 分布式任务调度
注意:调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例,如果mysql做主从,调度中心集群节点务必强制走主库
用户10125653
2022/11/10
1.3K0
springboot整合xxl-job 分布式任务调度
分布式任务调度平台XXL-JOB搭建教程
  关于分布式任务调度平台XXL-JOB,其实作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式记录下来。
IT可乐
2019/05/29
2.3K0
分布式任务调度平台XXL-JOB搭建教程
搭建分布式任务调度平台
3. 分布式任务调度中心会根据相应的路由策略选出其中的一个或者多个,然后再本地执行定时任务
envoke
2020/09/17
1.2K0
搭建分布式任务调度平台
分布式任务调度平台XXL-JOB
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
我没有三颗心脏
2019/10/08
2.3K0
分布式任务调度平台XXL-JOB
三分钟搞定 XXL-JOB 分布式任务调度平台
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/16
1.5K0
三分钟搞定 XXL-JOB 分布式任务调度平台
分布式任务调度平台XXL-JOB,不了解一下?
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
Bug开发工程师
2019/12/05
1.3K0
分布式任务调度平台 → XXL-JOB 初探
相信大家对任务调度都不陌生,说的通熟一点就是定时任务;这个在我们的项目中或多或少都存在,我们可以用 JDK 自带的(Timer、ScheduledExecutor)来实现,也可以用 Spring 的 Scheduler 来实现,不管用以上哪种方式,我们都是在单机上跑,如果我们以集群的方式部署,会不会出现什么问题 ?
青石路
2020/07/14
1.3K0
分布式任务调度利器—Xxl-job框架详解
近期开发中的功能中需要用到定时任务来做数据库的备份和文件的定时删除,所以调研了当前比较主流的几个定时任务框架,经过对比选定了今天要讲的xxl-job,所以这篇文章,我主要和大家分享一下xxl-job的学习总结,记录一下在分布式项目下如何优雅的使用xxl-job实现定时任务。
灰小猿
2024/05/25
28.8K0
分布式任务调度利器—Xxl-job框架详解
分布式任务调度平台XXL-JOB
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
用户1518699
2018/09/12
4.2K0
分布式任务调度平台XXL-JOB
SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
品茗IT
2020/05/28
1.6K0
分布式任务调度平台 XXL-JOB 2.0.0 发布
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
Debian中国
2018/12/21
1.1K1
分布式任务调度的解决方案
随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面:
慕容千语
2021/07/20
1.4K0
分布式定时任务调度框架实践
分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。
2020labs小助手
2020/03/09
1.3K0
一文读懂分布式任务调度平台XXL-JOB
本文主要介绍分布式任务调度平台XXL-JOB(v2.1.0版本),包括功能特性、实现原理、优缺点、同类框架比较等
用户5397975
2019/10/13
3.6K0
xxl-job 任务调度 项目的学习(框架使用步骤)
之后写任务,就是这个执行器项目里面有很多的任务,有的任务需要开启,有的需要关闭,那么每一个方法就是一个任务,那么每一个都需要单独的在这个管理平台进行注册
一写代码就开心
2022/06/14
5310
xxl-job 任务调度 项目的学习(框架使用步骤)
分布式任务调度xxl-job
在单机应用时期,任务调度一般都是基于spring schedule和集成quartz来实现的,当系统发展成分布式服务,应用多实例的时候,任务就会出现多次调用的问题,很多时候我们任务并不需要跑多次。解决方案有很多,最最简单粗暴的就是可以设置应用开关。其次就是集中式话任务管理调度。当然,quartz也有集群模式,但是基于api控制并不直观。下面介绍一个集中式的分布式任务调度框架,可以很方便的解决分布式任务调度的问题
kl博主
2023/11/18
4310
【黑马头条】day20—xxl-job
当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。
陶然同学
2023/04/02
6980
【黑马头条】day20—xxl-job
手把手教你实现xxl-job分布式任务调度平台搭建
首先我们需要先下载 xxl-job 的源码,下载地址:github:https://github.com/xuxueli/xxl-job。我这里下载使用的是 2.1.2 版本,下载完成后解压,然后使用 IDEA 的Import Project 导入到 IDE 中,注意使用 Maven 方式导入。
用户1516716
2020/09/22
1.7K0
手把手教你实现xxl-job分布式任务调度平台搭建
分布式任务调度平台 → XXL-JOB 实战
  老师:谁知道鞭炮用英语怎么说?   甲:老师!老师!我知道,鞭炮的英文是pilipala。   老师:那闪电呢?   乙:kucha kucha   老师:那舞狮呢?   丙:dong dong qiang   老师:你们几个先歇会吧!太费嗓子了!   老师:下一个,谁知道墨家创始人墨子的英文怎么翻译?   丁:black baby   老师:那老子是不是叫old baby?好了最后一题!我们都知道有位大诗人叫陆游,请问他的英文名应该怎么翻译呢?   辛:wifi   同学们:啊哈哈哈哈!!!
青石路
2020/08/05
9180
分布式任务调度平台 → XXL-JOB 实战
推荐阅读
相关推荐
新一代 Cron-Job分布式调度平台,v1.0.8版本发布,支持Go执行器SDK!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验