《分布式任务调度平台XXL-JOB》手册
- 格式:doc
- 大小:1.33 MB
- 文档页数:14
《分布式任务调度平台XXL-JOB》手册文档历史记录目录1:简介 (3)2:安装 (3)3:配置 (3)3.1数据库准备 (4)3.2源码准备 (5)3.3部署准备 (5)3.3.1 配置部署“调度中心” (5)3.3.2 配置部署“执行器项目” (7)4:使用 (9)步骤一:新建任务 (9)步骤二:“GLUE模式(Java)”任务开发 (10)步骤三:触发执行 (10)步骤四:查看日志 (10)5:总结 (11)1:简介XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,XXL-JOB是基于开源Quartz 调度内核的、为方便企业调度场景而开源的一款实用的调度工具。
自带任务配置页面,任务监控,分布式执行器等功能。
2:安装下载地址(最新1.9版本迭代中,可选择稳定版本1.8.2下载)码云:https:///xuxueli0323/xxl-job/tree/v1.8.23:配置解压下载文件,得到如下文件结构,- /doc :文档资料- /db :“调度数据库”建表脚本- /xxl-job-admin :调度中心,项目源码- /xxl-job-core :公共Jar依赖- /xxl-job-executor-samples :执行器,Sample示例项目3.1数据库准备使用mysql 新建数据库xxl-job ,导入下载文件夹中/doc/db/tables_xxl_job.sql 文件,应生成16张表,如图所示。
3.2源码准备按照maven格式将源码导入IDE,使用maven进行编译即可,源码结构如下xxl-job-admin:调度中心xxl-job-core:公共依赖xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器):xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用;:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;:xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;:xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;3.3部署准备3.3.1 配置部署“调度中心”调度中心项目:xxl-job-admin作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
SpringBoot整合Xxl-job实现定时任务的全过程⽬录前⾔⼀、部署调度中⼼1、项⽬下载2、初始化数据3、修改properties配置⽂件⼆、部署SpringBoot项⽬1、引⼊依赖2、创建配置类3、修改配置⽂件4、创建执⾏器5、启动SpringBoot项⽬三、通过调度中⼼进⾏任务调度1、添加执⾏器2、添加任务3、任务调度中⼼发起任务调度四、⼩结总结前⾔XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
如果是单机并且定时任务不多的情况,可以选择Timer注解@Scheduled或者Cron⼯具类等⽅式来实现,但是这有个缺点,那就是定时任务会写死在代码中,⼀旦启动,就不能暂停或者修改。
如果修改的话,整个还项⽬要重新编译,这属实⾮常的⿇烦。
本篇⽂章将会介绍如何通过xxl-job来实现任务的调度⼀、部署调度中⼼1、项⽬下载下⾯是调度中⼼代码的gitee地址,可以colon到本地/xuxueli0323/xxl-job2、初始化数据在下载好的项⽬中的doc/db⽬录下有⼀个tables_xxl_job.sql⽂件,先放到⾃⼰的数据库中执⾏,其实就是初始化好调度中⼼需要的表结构和数据3、修改properties配置⽂件⼆、部署SpringBoot项⽬1、引⼊依赖<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version></dependency>2、创建配置类@Configurationpublic class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.executor.appname}")private String appName;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appName);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}}3、修改配置⽂件xxl:job:admin:addresses: http://127.0.0.1:8080/xxl-job-admin #部署的调度中⼼的urlexecutor:appname: xxl-job-volunteer-executor #执⾏器的名字ip:port: 9999 #调度中⼼调⽤执⾏器时使⽤的端⼝logpath: /data/apploggs/xxl-job/jobhandler #⽇志路径logretentiondays: 30 #⽇志保留天数accessToken:4、创建执⾏器@Componentpublic class XxlJobSample {// myDemoJob是任务的名字,也是Spring中bean的名字@XxlJob("myDemoJob")public ReturnT<String> myDemoJob(String value) {System.out.println("myDemoJob:定时任务触发:" + value);return ReturnT.SUCCESS;}}5、启动SpringBoot项⽬启动成功后会看到下⾯两⾏⽇志信息,可以看到成功连接到了调度中⼼然后注册了将要被调度任务>>>>>>>>>>> xxl-job register jobhandler success, name:myDemoJob, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class ponent.XxlJobSample#myDemoJob] >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999三、通过调度中⼼进⾏任务调度1、添加执⾏器输⼊配置⽂件中配置的appName,名称可以随意2、添加任务新增调度任务查看调度任务3、任务调度中⼼发起任务调度在SpringBoot项⽬中可以看到控制台输出如下信息:2022-01-16 11:54:05.039 INFO 7836 --- [Pool-1148366645] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job regist JobThread success, jobId:7, handler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class pone myDemoJob:定时任务触发:testParam2022-01-16 11:55:38.059 INFO 7836 --- [ Thread-22] com.xxl.job.core.thread.JobThread : >>>>>>>>>>> xxl-job JobThread stoped, hashCode:Thread[Thread-22,10,main]四、⼩结⾄此,SpringBoot整合Xxl-job就完成了,刚才的⽰例代码其实对于原来的项⽬还是有⼀定的侵⼊性的,上⾯仅仅演⽰了BEAN运⾏模式,说⽩了就是调⽤加了@XxlJob的⽅法。
(19)国家知识产权局(12)发明专利申请(10)申请公布号 (43)申请公布日 (21)申请号 202210021289.X(22)申请日 2022.01.10(71)申请人 广东联合电子服务股份有限公司地址 510000 广东省广州市天河区体育西路189号15楼(72)发明人 黄强 李昊淼 张佳松 (74)专利代理机构 广州市越秀区哲力专利商标事务所(普通合伙) 44288专利代理师 徐鹏(51)Int.Cl.G06F 9/48(2006.01)G06F 21/31(2013.01)G06F 21/62(2013.01)(54)发明名称基于XXL-JOB的任务调度系统(57)摘要本申请公开了一种基于XXL ‑JOB的任务调度系统,涉及计算机技术,包括:Web模块,用于响应浏览器的访问请求,并向浏览器返回可交互界面;任务调度模块,用于根据Web模块采集的针对所述可交互界面的操作指令进行响应,所述任务调度模块至少用于调度针对数据库的操作任务;其中,所述可交互界面的输入框配置有校验程序,所述校验程序用于校验所述输入框的输入数据是否为SQL指令,当所述输入数据为SQL指令时,拦截该输入数据。
本申请实施例可以在采用XXL ‑JOB实现数据库任务调度的场景下,通过防注入措施保障系统得到安全。
权利要求书1页 说明书4页 附图1页CN 114528077 A 2022.05.24C N 114528077A1.一种基于XXL ‑JOB的任务调度系统,其特征在于,包括:Web模块,用于响应浏览器的访问请求,并向浏览器返回可交互界面;任务调度模块,用于根据Web模块采集的针对所述可交互界面的操作指令进行响应,所述任务调度模块至少用于调度针对数据库的操作任务;其中,所述可交互界面的输入框配置有校验程序,所述校验程序用于校验所述输入框的输入数据是否为SQL指令,当所述输入数据为SQL指令时,拦截该输入数据。
2.根据权利要求1所述的基于XXL ‑JOB的任务调度系统,其特征在于,所述可交互界面中包括任务调度列表和所述任务调度列表中各任务项的信息和操作按钮,所述任务调度模块根据针对所述操作按钮的操作执行进行响应。
xxl-job设计思想⼀、简介XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
⼆、源码地址:结构xxl-job-admin:调度中⼼ xxl-job-core:公共依赖 xxl-job-executor-samples:执⾏器Sample⽰例(选择合适的版本执⾏器,可直接使⽤,也可以参考其并将现有项⽬改造成执⾏器):xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执⾏器,推荐这种⽅式;:xxl-job-executor-sample-frameless:⽆框架版本;三、Springboot如何整合xxl-job1. 初始化调度数据库//源码地址: /xxl-job/doc/db/tables_xxl_job.sql2. Maven依赖3. 配置⽂件信息:端⼝,地址,数据库连接,线程池,国际化,token认证,报警邮件服务端等等4. 配置XxlJobConfig:注解⽅式或者继承类⽅式5. 创建Handler接⼝:具体任务的业务逻辑四、xxl-job架构思想1. 将调度⾏为抽象为调度中⼼公共平台,⽽平台本⾝不承担业务逻辑,调度中⼼负责发送调度请求。
2. 将任务抽象成分散的JobHandler,交由执⾏器统⼀管理,执⾏器负责接收调度请求,并且执⾏对应的业务逻辑,调度和任务完全解耦。
3. 调度和任务完全解耦,提⾼了系统稳定性和扩展性。
4. 其中调度中⼼⽀持可视化的动态管理调度信息,包括任务和执⾏器的curd,GLUC开发,报警信息配置,调度机制:轮询,第⼀个,最后⼀个,随机性,⼀致性Hash等算法等,所有操作实时⽣效,同事⽀持调度中⼼⽇志查看和操作,执⾏器的状态和⽇志查看。
5.架构图五、总结常⽤的定时任务以及分布式框架实现:1. while (true) + 线程休眠通过轮询+线程休眠实现定时任务。
xxl-job调度任务简单使⽤1. 简介XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
2. 使⽤步骤1:源码下载数据库脚本再源码/xxl-job/doc/db/tables_xxl_job.sql3.调度中⼼项⽬:xxl-job-admin修改配置⽂件中的数据库地址或端⼝/xxl-job/xxl-job-admin/src/main/resources/application.properties4.启动xxl-job-admin⼯程访问地址为:账号/密码 admin/1234565.⾄此,xxl-job服务启动完成,接下来将xxl植⼊到所要添加定时任务的⼯程中此次测试我使⽤的是:2.3.0版本<!-- /maven2/com/xuxueli/xxl-job-core/ --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.0</version></dependency>6.修改⼯程的yml⽂件,引⼊xxl配置#引⼊xxl-jobxxl:job:admin:# 调度中⼼部署跟地址 [选填]:如调度中⼼集群部署存在多个地址则⽤逗号分隔。
# 执⾏器将会使⽤该地址进⾏"执⾏器⼼跳注册"和"任务结果回调";为空则关闭⾃动注册;addresses: http://localhost:8080/xxl-job-adminexecutor:# 执⾏器AppName [选填]:执⾏器⼼跳注册分组依据;为空则关闭⾃动注册appname: springcloudalibaba-user-experience-job# 执⾏器IP [选填]:默认为空表⽰⾃动获取IP,多⽹卡时可⼿动设置指定IP,该IP不会绑定Host仅作为通讯实⽤;# address: http://192.168.2.29:9191# 地址信息⽤于 "执⾏器注册" 和 "调度中⼼请求并触发任务";# ip: 192.168.2.29# 执⾏器运⾏⽇志⽂件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使⽤默认路径;logpath: ./logs/xxl-job# 执⾏器⽇志⽂件保存天数 [选填] :过期⽇志⾃动清理, 限制值⼤于等于3时⽣效; 否则, 如-1, 关闭⾃动清理功能;logretentiondays: 30# 执⾏器端⼝号 [选填]:⼩于等于0则⾃动获取;默认端⼝为9999,# 单机部署多个执⾏器时,注意要配置不同执⾏器端⼝;port: 9192# 执⾏器通讯TOKEN [选填]:⾮空时启⽤;# accessToken:7.添加config配置⽂件import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Profile;/*** xxl-job config** @author* @date 2020/11/23*/@Slf4j@Configuration@Profile("!dev")public class XxlJobConfig {@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.executor.appname}")private String appName;/*@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;*/@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;/*** 注意:如果想本机调试,需要设置address、ip* @return*/@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appName);//xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setPort(port);//xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}}8.执⾏器管理--》添加执⾏器添加完成后,可以点击查看详情9.再代码中创建定时任务import com.alibaba.fastjson.JSONObject;import com.xxl.job.core.context.XxlJobHelper;import com.xxl.job.core.handler.annotation.XxlJob;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.InitializingBean;import ponent;import java.util.Date;@Slf4j@Componentpublic class UserJob1 implements InitializingBean {/*** 定时同步群发任务结果** @return*/@XxlJob("xxlJobTest")public String execute() {("start userTodoJob, time at:" + new Date());String params = XxlJobHelper.getJobParam();JSONObject jsonObject = JSONObject.parseObject(params);Integer orgId = jsonObject.getInteger("orgId");String corpId = jsonObject.getString("corpId");System.out.println("执⾏了"+params);return "执⾏了";}@Overridepublic void afterPropertiesSet() throws Exception {("Combination Job init suc at: " + new Date());}}10.任务管理中添加新的任务添加完成后,可再后⾯对该任务进⾏操作。
xxl-job介绍什么是任务调度什么是任务调度?某⼀时间段进⾏任务的操作。
具体任务调度有哪些应⽤的场景?数据同步、交易信息、清除⽤户的信息、定期发送报表数据、活动推送等。
传统实现定时任务的⽅式?Thread、TimeTask、ScheduleExecutorService、Quartz 等;不过,这⼏种⽅式都是在单点系统使⽤,⼀旦Job服务器宕机之后,就必须采取⼀些措施;具体操作如下:(1) 使⽤⼼跳检测监控⾃动重启、任务补偿机制(任务做标记)(2) 定时任务在执⾏代码的时候中间突然报错,使⽤⽇志记录错误,跳过继续执⾏,在使⽤定时Job 扫描⽇志错误记录,进⾏补偿信息。
(3) 定时Job 在执⾏的时候,导致整个 Job 异常结束掉,发送邮件通知给运维⼈员。
分布式定时任务的⽅式?XXL-Job、Elastic-job等。
不过,既然采⽤分布式,那么肯定会遇到项⽬部署集群,导致任务重复执⾏多次;具体操作如下:(1) Zookeeper 实现分布式锁,每次保证拿到锁再执⾏,效率⽐较低。
(2) 配置⽂件中加⼊定时任务的开关,但是只能保证⼀台服务器执⾏,变为单击服务器。
(3) 启动的时候使⽤数据库唯⼀标识;同样是效率低。
(4) 分布式调度任务平台,解决了任务幂等问题,Job 负载均衡轮询机制(推荐)。
那么现在我们来总结下,⾸先传统的定时任务,⼏乎⽆法做到⾼可⽤,再加上项⽬部署集群,会导致任务幂等性问题;此时分布式定时任务调度平台便发挥了作⽤,咱们拿 XXL-Job 来进⾏说明;相关作⽤如下:(1) ⽀持Job集群,Job 负载均衡轮询机制保证幂等性问题。
(2) ⽀持Job补偿,如果Job执⾏失败的话,会⾃动实现重试机制,超过重启次数后,会发送邮件通知运维⼈员。
(3) ⽀持Job⽇志记录。
(4) 动态配置定时规则,传统定时Job触发规则都是写死在代码中。
XXL-JOB简介开源社区:环境:Maven3+Jdk1.8+Mysql5.7+xxl-job执⾏原理调度平台、执⾏器、任务管理,相关解释如下:调度平台:统⼀管理任务调度的平台,负责转发任务到对应的执⾏服务器。
分布式任务调度平台XXL-JOB《分布式任务调度平台XXL-JOB》[TOCM][TOC]⼀、简介1.1 概述XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
1.2 社区交流1.3 特性1、简单:⽀持通过Web页⾯对任务进⾏CRUD操作,操作简单,⼀分钟上⼿;2、动态:⽀持动态修改任务状态、启动/停⽌任务,以及终⽌运⾏中任务,即时⽣效;3、调度中⼼HA(中⼼式):调度采⽤中⼼式设计,“调度中⼼”⾃研调度组件并⽀持集群部署,可保证调度中⼼HA;4、执⾏器HA(分布式):任务分布式执⾏,任务"执⾏器"⽀持集群部署,可保证任务执⾏HA;5、注册中⼼: 执⾏器会周期性⾃动注册任务, 调度中⼼将会⾃动发现注册的任务并触发执⾏。
同时,也⽀持⼿动录⼊执⾏器地址;6、弹性扩容缩容:⼀旦有新执⾏器机器上线或者下线,下次调度时将会重新分配任务;7、路由策略:执⾏器集群部署时提供丰富的路由策略,包括:第⼀个、最后⼀个、轮询、随机、⼀致性HASH、最不经常使⽤、最近最久未使⽤、故障转移、忙碌转移等;8、故障转移:任务路由策略选择"故障转移"情况下,如果执⾏器集群中某⼀台机器故障,将会⾃动Failover切换到⼀台正常的执⾏器发送调度请求。
9、阻塞处理策略:调度过于密集执⾏器来不及处理时的处理策略,策略包括:单机串⾏(默认)、丢弃后续调度、覆盖之前调度;10、任务超时控制:⽀持⾃定义任务超时时间,任务运⾏超时将会主动中断任务;11、任务失败重试:⽀持⾃定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进⾏重试;其中分⽚任务⽀持分⽚粒度的失败重试;12、任务失败告警;默认提供邮件⽅式失败告警,同时预留扩展接⼝,可⽅便的扩展短信、钉钉等告警⽅式;13、分⽚⼴播任务:执⾏器集群部署时,任务路由策略选择"分⽚⼴播"情况下,⼀次任务调度将会⼴播触发集群中所有执⾏器执⾏⼀次任务,可根据分⽚参数开发分⽚任务;14、动态分⽚:分⽚⼴播任务以执⾏器为维度进⾏分⽚,⽀持动态扩容执⾏器集群从⽽动态增加分⽚数量,协同进⾏业务处理;在进⾏⼤数据量业务操作时可显著提升任务处理能⼒和速度。
(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号 (43)申请公布日 (21)申请号 202111626396.7(22)申请日 2021.12.28(71)申请人 苏州小棉袄信息技术股份有限公司地址 215000 江苏省苏州市东吴北路299号1901室(1909、1910、1911)(72)发明人 乐涛 肖书恒 李天阁 靳涛涛 刘肖 冯志远 金涛 韩阳 (74)专利代理机构 绍兴市越兴专利事务所(普通合伙) 33220代理人 高林(51)Int.Cl.G06F 9/48(2006.01)G06F 9/54(2006.01)(54)发明名称基于XXL-JOB分布式任务调度系统的路由策略(57)摘要本发明涉及分布式任务调度技术领域,尤其涉及一种基于XXL ‑JOB分布式任务调度系统的路由策略,包括以下步骤:各执行器自身根据任务流控规则判断当前是否可参与新任务;可执行新任务的执行器与调度中心之间确认系统标识,调度中心选定其中一台执行器为任务调度机器;任务调度机器接收任务参数并执行;优势在于:基于XXL ‑JOB分布式任务调度平台第10种分片广播路由策略,通过广播模式广播任务,所有任务流控规则验证通过的执行器机器均会尝试拉取任务,根据业务逻辑最终仅有一台机器能完整的完成系统标记身份确认以及任务调度确认,降低了出现“抢占式”业务执行逻辑时的负载风险。
权利要求书1页 说明书4页 附图1页CN 114265681 A 2022.04.01C N 114265681A1.一种基于XXL ‑JOB分布式任务调度系统的路由策略,其特征在于,包括以下步骤:S10.各执行器自身根据任务流控规则判断当前是否可参与新任务;S20.可执行新任务的执行器与调度中心之间确认系统标识,调度中心选定其中一台执行器为任务调度机器;S30. 任务调度机器接收任务参数并执行。
2.如权利要求1所述的一种基于XXL ‑JOB分布式任务调度系统的路由策略,其特征在于,所述任务流控规则包括执行器的正在执行的任务数、待重试任务数、队列等待任务数和延时任务数,在所述步骤S10中,执行器根据任务流控规则判断自身健康情况和负载情况,若执行器属于健康且负载未超阈值,则可参与新的调度任务。
本技术公开了一种基于XXL JOB实现分布式调度任务的方法及系统,属于计算机软件开发技术领域。
本技术的基于XXL JOB实现分布式调度任务的方法配置部署调度中心,统一管理任务调度平台上调度任务,触发调度执行,并提供任务管理平台;配置部署执行器项目,接收调度中心的调度并执行;在可视化界面配置执行器及新建任务。
该技术的基于XXL JOB实现分布式调度任务的方法能够减轻服务器压力,提高系统的运行效率,在确保各用户数据间隔的同时能完成调度任务,具有很好的推广应用价值。
权利要求书1.一种基于XXL-JOB实现分布式调度任务的方法,其特征在于:该方法配置部署调度中心,统一管理任务调度平台上调度任务,触发调度执行,并提供任务管理平台;配置部署执行器项目,接收调度中心的调度并执行;在可视化界面配置执行器及新建任务。
2.根据权利要求1所述的基于XXL-JOB实现分布式调度任务的方法,其特征在于:具体包括以下步骤:S1、初始化调度数据,创建数据库;S2、配置调度中心;S3、配置执行器项目,配置项目中的配置文件;S4、新增执行器;S5、新建任务;S6、编写代码来实现执行调度任务的执行器。
3.根据权利要求2所述的基于XXL-JOB实现分布式调度任务的方法,其特征在于:步骤S1中,创建名为XXL-JOB的数据库,在XXL-JOB数据库中创建XXL-JOB使用的表。
4.根据权利要求3所述的基于XXL-JOB实现分布式调度任务的方法,其特征在于:步骤S2包括:配置XXL-JOB中的配置文件,配置下访问的端口和路径,然后配置数据库连接信息,再可以选择的配置发送邮件信息。
5.根据权利要求4所述的基于XXL-JOB实现分布式调度任务的方法,其特征在于:步骤S4中,登录任务调度中心系统,点击执行器管理菜单,点击新增管理器,保存即可。
6.根据权利要求5所述的基于XXL-JOB实现分布式调度任务的方法,其特征在于:步骤S5中,登录任务调度中心系统,点击任务管理菜单中的新增任务,进入新增页面后,配置创建的执行器。
XXL-JOB任务调度⽇常开发中难免会碰到需要开启定时任务处理业务。
这时我们第⼀时间想到的是Spring的Task,但是很不⽅便,这⾥可以列出⼏点: 1.⼀旦需要更改定时任务时间,我们就要打开IDE修改cron表达式; 2.在特殊的情况下代码报错了,我们就要打开Log查看是什么导致的问题; 3.需要很多定时任务去处理业务就要新建多个,突然不想执⾏这个任务了,我们就要再打开IDE注释那些代码。
就特别不好管理。
可能⼜有⼈要说了: 1.我可以⽤Redis进⾏动态修改cron表达式;--------看下⾯代码 2.我写个Aop,只要出现异常了我就记录相关信息;-------- ⽜掰!Aop固然好,但是你觉得真的⽅便了吗? 3.······我就是不闲⿇烦,咋地。
--------打扰了package cn.chenghao.config;import lombok.AllArgsConstructor;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import org.springframework.scheduling.support.CronTrigger;import javax.annotation.PostConstruct;/*** ⾃定义定时任务** @Author chenghao* @Date 2020/4/14 11:56**/@Configuration@EnableScheduling@AllArgsConstructorpublic class CompleteScheduleConfig implements SchedulingConfigurer {/*** StringRedis模板*/private final StringRedisTemplate stringRedisTemplate;/*** 初始化*/@PostConstructprivate void init() {// redis中不存在则创建stringRedisTemplate.opsForValue().setIfAbsent("cron", "0/3 * * * * ?");}/*** 配置任务*/@Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {// 给定cron表达式,触发Runnable任务scheduledTaskRegistrar.addTriggerTask(() -> {System.out.println("执⾏定时任务中.......");},triggerContext -> {// 获取cron表达式String cron = stringRedisTemplate.opsForValue().get("cron");// 返回执⾏周期return new CronTrigger(cron).nextExecutionTime(triggerContext);});}}!(真的是太⽅便了)----------------------------------好,废话不再多说----------------------------------XXL-JOB地址:概述:XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
xxl-job原理
XXL-JOB是一款轻量级开源的分布式任务调度框架,xxl-job节点划分为"执行器"与"调度器"两大模块,服务间无状态,执行器与调度器可以异机部署。
执行器是一种基本的任务执行服务,执行器上的任务是以"插件化"的方式,通过java jar文件部署在执行器上,当调度器需要请求执行任务时,执行器就会将任务部署在指定的机器上执行。
调度器通过RESTful API(REST非对称API)向下游提供服务,调度器可以根据不同的应用需求,自定义调度任务的触发时机,比如一秒执行一次,一小时执行一次,每分钟执行一次等,同时也可以支持定时,定点,指定间隔执行,秒级任务、分级任务、小时级任务,日级任务等等。
XXL-JOB还支持分布式、HA部署,多台服务器节点间互相通信,扩展性也很强,可以扩展更多更复杂的特性,如URL参数调度、多租户数据分隔等。
XXL-JOB还支持任务调度的"可视化配置"管理,便于操作人员将任务部署到不同的执行器上,以流程的方式进行管理,让运维的任务更加轻松和高效。
另外,XXL-JOB还提供了用户可视化端,可以根据任务的运行状态、任务的运行时间等信息,以及实时任务的监控,便于用户对任务进行更好的管理,快速找出任务出现的问题,以实现自动化管理。
介绍⼀种很好⽤的任务调度平台1 总体设计分布式任务调度平台是什么XXL-JOB是⼀个轻量级分布式任务调度平台,和quartz相似,但是XXL-JOB将调度中⼼与执⾏器解耦,弥补了quartz的不⾜(使⽤API⽅式操作任务,不⼈性化;系统侵⼊性严重等)其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
⽂档我这边可以给。
源码⽬录介绍/xxl-job-admin :调度中⼼,项⽬源码/xxl-job-core :公共Jar依赖/xxl-job-executor-samples :执⾏器,Sample⽰例项⽬(⼤家可以在该项⽬上进⾏开发,也可以将现有项⽬改造-⽣成“调度数据库”配置XXL-JOB调度模块基于Quartz集群实现,其“调度数据库”是在Quartz的11张集群mysql表基础上扩展⽽成。
XXL-JOB⾸先定制了Quartz原⽣表结构前缀(XXL_JOB_QRTZ_)。
我们代码配置和源码配置⼀样在此基础上新增了⼏张张扩展表。
正常情况下总共16张表所有表(若想详细了解可以查看⽂档):架构设计设计思想“调度中⼼”负责发起调度请求。
“执⾏器”负责接收调度请求并执⾏对应的JobHandler 中业务逻辑。
系统组成调度模块(调度中⼼)负责管理调度信息,按照调度配置发出调度请求,⾃⾝不承担业务代码。
调度系统与任务解耦,提⾼了系统可⽤性和稳定性,同时调度系统性能不再受限于任务模块;⽀持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE 开发和任务报警等,所有上述操作都会实时⽣效,同时⽀持监控调度结果以及执⾏⽇志,⽀持执⾏器Failover 。
- XXL_JOB_QRTZ_TRIGGER_GROUP :执⾏器信息表,维护任务执⾏器信息;- XXL_JOB_QRTZ_TRIGGER_REGISTRY :执⾏器注册表,维护在线的执⾏器和调度中⼼机器地址信息;- XXL_JOB_QRTZ_TRIGGER_INFO :调度扩展信息表: ⽤于保存XXL-JOB 调度任务的扩展信息,如任务分组、任务名、机器地址、执⾏器、执⾏⼊参和报警邮件等等;- XXL_JOB_QRTZ_TRIGGER_LOG :调度⽇志表: ⽤于保存XXL-JOB 任务调度的历史信息,如调度结果、执⾏结果、调度⼊参、调度机器和执⾏器等等;- XXL_JOB_QRTZ_TRIGGER_LOGGLUE :任务GLUE ⽇志:⽤于保存GLUE 更新历史,⽤于⽀持GLUE 的版本回溯功能;执⾏模块(执⾏器)负责接收调度请求并执⾏任务逻辑。
xxljob分片原理XXLJob是一款分布式作业调度系统,它可以实现分片作业,可以有效地提高工作效率,解决大型复杂作业调度问题。
本文将详细介绍XXLJob分片原理,带领大家了解XXLJob分片调度技术。
1、XXLJob分片介绍XXLJob分片,也称分片调度,是一种用于对工作进行分片的调度技术。
它可以将一个大型的或者复杂的作业拆分成多个工作片段,每一个片段都可以单独调度和执行,从而实现工作的并行处理。
XXLJob分片主要用于批量数据处理和其他计算任务,它可以高效地处理大量数据和高容量任务,降低工作量和完成任务的时间。
XXLJob分片调度技术支持多种作业类型,如实时作业、定时作业、周期性作业等,它的主要特点是将单个作业拆分成多个片段,支持多种数据源,提供可靠的作业调度服务,支持多台机器调度,可以实现跨机器的分布式作业处理,分片数量可配置,支持拆分结果反馈,进程安全性等。
2、XXLJob分片原理XXLJob分片原理可以分为两部分:拆分原理和调度原理。
拆分原理:在XXLJob分片原理中,拆分作业是指将一个大型的或者复杂的作业拆分成多个片段,每一个片段可以单独调度和执行,从而实现作业的并行处理。
XXLJob拆分原理基于数据类型,由数据源提供数据,不同的数据源拆分算法也不同,例如,如果数据源是数据库,可以通过计算每个分片范围的数据量来实现拆分;而如果数据源是文件,则可以通过计算文件大小以及分片数量来实现拆分。
调度原理:在XXLJob分片原理中,调度原理指的是将作业拆分成多个片段后,如何对片段进行调度和执行。
XXLJob调度原理分为三种模式:调度模式、执行模式和结果反馈模式。
调度模式:即在调度系统中根据作业参数进行调度,调度系统可以根据作业参数的不同分配不同的调度机器,从而实现跨机器分布式作业处理。
执行模式:即根据调度结果,在调度机器上执行作业。
调度机器可以根据片段数量进行并发执行,从而实现分片作业的并行处理,在整个作业执行完后,调度机器还可以将每个片段的执行结果进行汇总,完成最终调度结果的收集和处理。
利⽤XXL-JOB实现灵活控制的分⽚处理本⽂讲述了⼀种利⽤ XXL-JOB 来进⾏分⽚任务处理的⽅法,另外加⼊对执⾏节点数的灵活控制。
场景现在⼀张数据表⾥有⼤量数据需要某个服务端应⽤来处理,要求:1. 能够并⾏处理;2. 能够较灵活地控制并⾏任务数量。
3. 压⼒较均衡地分散到不同的服务器节点;思路因为需要并⾏处理同⼀张数据表⾥的数据,所以⽐较⾃然地想到了分⽚查询数据,可以利⽤对 id 取模的⽅法进⾏分⽚,避免同⼀条数据被重复处理。
根据第 1、2 点要求,本来想通过对线程池的动态配置来实现,但结合第 3 点来考虑,服务器节点数量有可能会变化,节点之间相互⽆感知⽆通信,⾃⼰在应⽤内实现⼀套调度机制可能会很复杂。
如果有现成的独⽴于这些服务器节点之外的调度器就好了——顺着这个思路,就想到了已经接⼊的分布式任务调度平台 XXL-JOB,⽽在阅读其后发现「分⽚⼴播 & 动态分⽚」很贴合这种场景。
⽅案1. 利⽤ XXL-JOB 的路由策略「分⽚⼴播」来调度定时任务;2. 通过任务参数传⼊执⾏任务节点数量;3. 定时任务逻辑⾥,根据获取到的分⽚参数、执⾏任务节点数量,决策当前节点是否需要执⾏,分⽚查询数据并处理:如果分⽚序号 > (执⾏任务节点数量 - 1),则当前节点不执⾏任务,直接返回;否则,取分⽚序号和执⾏任务节点数量作为分⽚参数,查询数据并处理。
这样,我们可以实现灵活调度 [1, N] 个节点并⾏执⾏任务处理数据。
主要代码⽰例JobHandler ⽰例:@XxlJob("demoJobHandler")public void execute() {String param = XxlJobHelper.getJobParam();if (StringUtils.isBlank(param)) {XxlJobHelper.log("任务参数为空");XxlJobHelper.handleFail();return;}// 执⾏任务节点数量int executeNodeNum = Integer.valueOf(param);// 分⽚序号int shardIndex = XxlJobHelper.getShardIndex();// 分⽚总数int shardTotal = XxlJobHelper.getShardTotal();if (executeNodeNum <= 0 || executeNodeNum > shardTotal) {XxlJobHelper.log("执⾏任务节点数量取值范围[1,节点总数]");XxlJobHelper.handleFail();return;}if (shardIndex > (executeNodeNum - 1)) {XxlJobHelper.log("当前分⽚ {} ⽆需执⾏", shardIndex);XxlJobHelper.handleSuccess();return;}shardTotal = executeNodeNum;// 分⽚查询数据并处理process(shardIndex, shardTotal);XxlJobHelper.handleSuccess();}分⽚查询数据⽰例:select field1, field2from table_namewhere ...and mod(id, #{shardTotal}) = #{shardIndex}order by id limit #{rows};进⼀步思考1. 如果需要更⼤的并发量,需要有⼤于应⽤节点数量的任务并⾏,如何处理?两种思路:通过任务参数传⼊⼀个并发数,单个节点在处理任务时,将查询到的数据按这个数字进⾏再分⽚,交由线程池并⾏处理;配置 M 个定时任务,指定相同的 JobHandler,给它们编号 0、1、2...M,并将定时任务编号和 M 这两个数,由任务参数传⼊,定时任务逻辑⾥,先根据分⽚参数、定时任务编号、M,重新计算出新的分⽚参数,如分⽚序号 = (分⽚序号 * M) + 定时任务编号,分⽚总数 = 分⽚总数 * M,再查询数据并处理。
分布式定时任务调度系统技术解决⽅案(xxl-job、Elastic-job、Saturn)1.业务场景保险⼈管系统每⽉⼯资结算,平安有150万代理⼈,如何快速的进⾏⼯资结算(数据运算型)保险短信开门红/电商双⼗⼀ 1000w+短信发送(短时汇聚型)⼯作中业务场景⾮常多,所涉及到的场景也各不相同,这使得我们定时任务系统应该集管理、调度、任务分配、监控预警为⼀体的综合调度系统,如何打造⼀套健壮的、适应不同场景的系统,技术选型尤其重要。
针对以上场景我们需要我们的分布式任务系统具备以下能⼒:1.⽀持多种作业类型(shell作业/Java作业)2.⽀持作业HA,负载均衡和失败转移3.⽀持弹性扩容(应对开门红以及促销活动)4.⽀持Job Timeout 处理5.⽀持统⼀监控和告警6.⽀持作业统⼀配置7.⽀持资源隔离和作业隔离2.定时任务调度的特点任务调度就是设点某⼀时间点⾃动触发的任务,该任务可以在时间规律上去循环执⾏。
⼀般的技术quartz、spring task、java.util.Timer,这⼏种如果在单⼀机器上跑其实问题不⼤,但是如果⼀旦应⽤于集群环境做分布式部署,就会带来⼀个致命的特点:时间驱动:系统⼀般可以通过时间来驱动,定时定点定次。
批量处理:批量处理堆积的数据更加⾼效,在不需要实时性的情况下⽐消息中间件更有优势。
⽽且有的业务逻辑只能批量处理。
如对账批处理、资⾦管理系统回盘、部分银⾏的报盘前的制盘⾮实时性:定时任务不要求实时性,⼀般不⽤于C端⽤户的交互,更多的⽤于业务数据的处理隔离性/专⼀性:可以跟其他系统分离,只关注业务数据的处理,不影响⽤户的操作和⽤户系统的性能。
基本原理:3.开源定时任务框架Quartz:Java事实上的定时任务标准。
但Quartz关注点在于定时任务⽽⾮数据,并⽆⼀套根据数据处理⽽定制化的流程。
虽然Quartz可以基于数据库实现作业的⾼可⽤,但缺少分布式并⾏调度的功能。
《分布式任务调度平台X X L-J O B》手册
work Information Technology Company.2020YEAR
《分布式任务调度平台XXL-JOB》手册文档历史记录
目录
1:简介 (4)
2:安装 (4)
3:配置 (4)
3.1数据库准备 (5)
3.2源码准备 (6)
3.3部署准备 (7)
3.3.1 配置部署“调度中心” (7)
3.3.2 配置部署“执行器项目” (9)
4:使用 (11)
步骤一:新建任务 (12)
步骤二:“GLUE模式(Java)”任务开发 (12)
步骤三:触发执行 (13)
步骤四:查看日志 (13)
5:总结 (14)
1:简介
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,XXL-JOB是基于开源 Quartz 调度内核的、为方便企业调度场景而开源的一款实用的调度工具。
自带任务配置页面,任务监控,分布式执行器等功能。
2:安装
下载地址(最新1.9版本迭代中,可选择稳定版本1.8.2下载)
码云: https:///xuxueli0323/xxl-job/tree/v1.8.2
3:配置
解压下载文件,得到如下文件结构,
- /doc :文档资料
- /db :“调度数据库”建表脚本
- /xxl-job-admin :调度中心,项目源码
- /xxl-job-core :公共Jar依赖
- /xxl-job-executor-samples :执行器,Sample示例项目
3.1数据库准备
使用 mysql 新建数据库xxl-job ,导入下载文件夹
中 /doc/db/tables_xxl_job.sql 文件,应生成16张表,如图所示。
3.2源码准备
按照maven格式将源码导入IDE,使用maven进行编译即可,源码结构如下
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
:xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用;
:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;
:xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;
:xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;
3.3部署准备
3.3.1 配置部署“调度中心”
调度中心项目:xxl-job-admin
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
步骤一:调度中心配置
文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties,数据库连接地址与上面所创建数据库的地址要一致。
步骤二:部署项目
可将项目编译的war包部署到tomcat中,现将war部署到192.168.110.2
服务器上将war包复制到 /root/apache-tomcat-7.0.78/webapps 目录下。
启动tomcat,游览器输入http://192.168.110.2:8080/xxl-job-admin/
3.3.2 配置部署“执行器项目”
“执行器”项目:xxl-job-executor-sample-spring (提供多种版本执行器供选择,现以Spring版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)
作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
步骤一:maven依赖
确认pom文件中引入了 "xxl-job-core" 的maven依赖;
步骤二:执行器配置
文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-
spring/src/main/resources/xxl-job-executor.properties 如tomcat端口占用,可将xxl.job.executor.port改成9888
步骤三:执行器组件配置
文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/reso urces/applicationcontext-xxl-job.xml
步骤四:部署执行器项目
同“调度中心”war一致复制到 /root/apache-tomcat-7.0.78/webapps 目录下,启动tomcat
4:使用
本示例以新建一个“GLUE模式(Java)” 运行模式的任务为例。
(“GLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)
前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;
步骤一:新建任务
登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。
然后,参考下面截图中任务的参数配置,点击保存,Cron表达式,例如0 0/1 * * * 每一分钟执行一次。
步骤二:“GLUE模式(Java)”任务开发
请点击任务右侧“GLUE” 按钮,进入“GLUE编辑器开发界面” ,见下图。
“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印“XXL-JOB, Hello World. 2018-03-27/xuya”
步骤三:触发执行
请点击任务右侧“执行” 按钮,可手动触发一次任务执行
步骤四:查看日志
请点击任务右侧“日志” 按钮,可前往任务日志界面查看任务日志。
在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。
运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。
在日志控制台,可以Rolling方式实时查看任务在执行器一侧运行输出的日
志信息,实时监控任务进度;
5:总结
XXL-JOB将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性。
附上XXL-JOB架构图:。