首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一款分布式定时任务框架

一款分布式定时任务框架

作者头像
用户3467126
发布于 2021-02-24 02:17:02
发布于 2021-02-24 02:17:02
91300
代码可运行
举报
文章被收录于专栏:爱编码爱编码
运行总次数:0
代码可运行

前言

又消失了一阵子,最近用了一款比较好的定时任务开源项目XXL-JOB来给大家分享一下。

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

开源地址:https://gitee.com/xuxueli0323/xxl-job https://github.com/xuxueli/xxl-job

目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等.... Quartz作为开源作业调度中的佼佼者,是作业调度的首选。集群环境中Quartz采用API的方式对任务进行管理,Quartz存在以下问题:

XXL-JOB特性

官方的描述:

  • 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
  • 2、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA
  • 3、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址
  • 4、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务
  • 5、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等。等等......

总结一句话就是简单、动态配置、实时监控,分布式、错误跟踪报警功能。

使用教程

1.下载

https://gitee.com/xuxueli0323/xxl-job.git

源码结构如下:xxl-job-admin:调度中心 xxl-job-core:公共依赖 xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器) :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;: xxl-job-executor-sample-frameless:无框架版本;

2.初始化数据库

获取 "调度数据库初始化SQL脚本" 并执行即可。"调度数据库初始化SQL脚本" 位置为: /xxl-job/doc/db/tables_xxl_job.sql 调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例; 如果mysql做主从,调度中心集群节点务必强制走主库;

3.部署调度中心

调度中心项目:xxl-job-admin 作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

调度中心配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### 调度中心JDBC链接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

### 报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

### 登录账号
xxl.job.login.username=admin
xxl.job.login.password=123456

### 调度中心通讯TOKEN,用于调度中心和执行器之间的通讯进行数据加密,非空时启用
xxl.job.accessToken=

### 调度中心国际化设置,默认为中文版本,值设置为“en”时切换为英文版本
xxl.job.i18n=

4.部署项目

如果已经正确进行上述配置,可将项目编译打包部署。调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址),登录后运行界面如下图所示

至此“调度中心”项目已经部署成功。

5.部署执行器项目

执行器负责接收“调度中心”的调度并执行;在源码中作者已经贴心的给出了多种执行器项目示例,可根据你的喜好直接将其部署作为你自己的执行器,当然你也可以将执行器集成到现有业务项目中去

6.开发自己的任务

在执行器项目中新建自己的任务,代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.tp.athena.jobhandler;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.stereotype.Component;

import javax.sound.midi.Soundbank;
import java.util.concurrent.TimeUnit;

/**
 * 任务Handler示例(Bean模式)
 * <p>
 * 开发步骤:
 * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
 * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
 * 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。
 * 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
 *
 * @author xuxueli 2015-12-19 19:43:36
 */
@JobHandler(value = "demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {

    @Override
    public ReturnT<String> execute(String param) throws Exception {
        System.out.println("XXL-JOB Hello World");
        return SUCCESS;
    }
}

然后在调度中心新建任务 登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。

启动调度中心,启动执行器项目。在调度中心我们可以查看调度日志:

如果对你有用,顺手点赞一下呗。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱编码 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式任务调度平台XXL-JOB搭建教程
  关于分布式任务调度平台XXL-JOB,其实作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式记录下来。
IT可乐
2019/05/29
2.4K0
分布式任务调度平台XXL-JOB搭建教程
分布式任务调度平台XXL-JOB
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
我没有三颗心脏
2019/10/08
2.4K0
分布式任务调度平台XXL-JOB
分布式任务调度平台XXL-JOB,不了解一下?
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
Bug开发工程师
2019/12/05
1.3K0
SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
品茗IT
2020/05/28
1.7K0
分布式任务调度利器—Xxl-job框架详解
近期开发中的功能中需要用到定时任务来做数据库的备份和文件的定时删除,所以调研了当前比较主流的几个定时任务框架,经过对比选定了今天要讲的xxl-job,所以这篇文章,我主要和大家分享一下xxl-job的学习总结,记录一下在分布式项目下如何优雅的使用xxl-job实现定时任务。
灰小猿
2024/05/25
35.2K0
分布式任务调度利器—Xxl-job框架详解
XXL-JOB
程序员朱永胜
2023/08/17
3640
XXL-JOB
分布式任务调度的解决方案
随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面:
慕容千语
2021/07/20
1.5K0
分布式任务调度平台 → XXL-JOB 初探
相信大家对任务调度都不陌生,说的通熟一点就是定时任务;这个在我们的项目中或多或少都存在,我们可以用 JDK 自带的(Timer、ScheduledExecutor)来实现,也可以用 Spring 的 Scheduler 来实现,不管用以上哪种方式,我们都是在单机上跑,如果我们以集群的方式部署,会不会出现什么问题 ?
青石路
2020/07/14
1.3K0
spring boot项目整合xxl-job
关于分布式任务调度平台XXL-JOB,作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里就不做过多的介绍了。按照文档搭建xxl-job,做此记录。
BUG弄潮儿
2020/06/29
4.2K0
分布式调度XXL-JOB
在业务类中方法中贴上这个注解,然后在启动类上贴上@EnableScheduling注解
yuanshuai
2023/11/17
3790
分布式调度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.8K0
手把手教你实现xxl-job分布式任务调度平台搭建
SpringBoot+XXL-JOB:高效定时任务管理
在现代应用程序中,定时任务是不可或缺的一部分。Spring Boot 和 XXL-Job 为你提供了一个强大的工具组合,以简化任务调度和管理。
程序员皮皮林
2024/10/10
1.4K0
SpringBoot+XXL-JOB:高效定时任务管理
分布式任务调度平台XXL-JOB
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
用户1518699
2018/09/12
4.3K0
分布式任务调度平台XXL-JOB
分布式定时任务调度框架实践
分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。
2020labs小助手
2020/03/09
1.3K0
后端技术:Java定时任务的五种创建方式
job任务名:@JobHandler注解值 >> 如:@JobHandler(value=“demoJobHandler”)
小明互联网技术分享社区
2021/09/09
1K0
xxl-job Vs ElasticJob,谁牛?
1. xxl-job 2. 运行 xxl-job 3. 开发定时任务 3.1 项目创建及配置 3.2 定时任务开发方式 4. 小结 前两天写了一篇文章介绍了一下 ElasticJob,有不少小伙伴强烈建议讲讲 xxl-job,其实 ElasticJob 本来就是一个引子,松哥本来就是想和大家分享 xxl-job 的(手动狗头。 1. xxl-job 松哥也在微信群里和小伙伴们讨论过各自到底用的是 xxl-job 还是 ElasticJob,讨论的结果就是,xxl-job 使用的人更多一些。 不说功能的优劣,
江南一点雨
2022/03/24
2.1K0
三千字带你搞懂XXL-JOB任务调度平台
所以定时任务在平时开发中并不少见,而且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,应用非常广泛。
java技术爱好者
2020/10/10
8.7K0
三千字带你搞懂XXL-JOB任务调度平台
【黑马头条】day20—xxl-job
当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。
陶然同学
2023/04/02
7310
【黑马头条】day20—xxl-job
分布式任务调度框架XXL-JOB入门级教程
下载源码导入idea,源码地址:https://gitee.com/xuxueli0323/xxl-job.git
小熊学Java
2023/07/16
1.5K0
分布式任务调度框架XXL-JOB入门级教程
分布式任务调度系统XXL-Job快速入门体验
为了能够更加灵活的控制定时任务,最近在项目中开始推行定时任务调度系统,跟不少大厂朋友交流之后,发现XXL-Job市场还是挺广的,功能强大,定为首选。
程序新视界
2022/05/09
9290
分布式任务调度系统XXL-Job快速入门体验
相关推荐
分布式任务调度平台XXL-JOB搭建教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档