XXL-JOB架构图
XXL-JOB架构图

调度中心
任务池
宴会商户头图绑定JOB
婚宴默认搜索排序跑分JOB
……
调度器A【block】
调度器B【block】
调度器C【active】
调度日志
执行器
调度队列
调度请求
调度请求
……
任务执行【业务逻辑】
XXL-JOB架构图 v1.3
调度中心
调度池
执行器地址
调度日志 / GLUE日志
日志管理
调度日志
Rolling日志
GLUE版本日志
……
其他
运行报表
失败告警
任务依赖
……
注册线程
执行器服务
调度结果(queue)
JobHandler
任务线程
调度请求(queue)
自研RPC(xxl-rpc)
执行日志(Log文件)
回调线程
Rolling日志(实时)
日志服务
XXL-JOB架构图 v2.0.0
其他
运行报表
失败告警
任务依赖
……
自动注册
执行器服务(jetty)
调度结果(queue)
JobHandler
任务线程
调度请求(queue)
自研RPC
执行日志(Log文件)
回调线程
Rolling日志(实时)
日志服务(jetty)
XXL-JOB架构图 v1.8
调度中心
数据中心
注册服务(API)
任务管理
执行器
调度请求(queue)
自研RPC
执行日志(Log文件)
回调线程
Rolling日志(实时)
日志服务(jetty)
SpringBoot整合Xxl-Job的完整步骤记录

SpringBoot整合Xxl-Job的完整步骤记录⼀、下载Xxl-Job源代码并导⼊本地并运⾏1.使⽤Idea或Eclipse导⼊2.执⾏sql脚本(红⾊标记处)3.运⾏xxl-job-admin(xxl-job后台管理,主要⽅便管理各种各样的任务)注意:在运⾏之前,需要把2的sql脚本执⾏完毕,并修改数据库连接池。
效果图,如下所⽰:⽤户名默认为admin密码为123456输⼊后,进⼊这个界⾯,如图:这样就表⽰Xxl-Job成功运⾏了。
确保运⾏没问题后,就可以开始下⼀步。
⼆、添加执⾏器(Xxl-Job源代码就⼀个Example,可以复⽤过来,你也可以选择⾃⼰新建项⽬,新建项⽬可以在Xxl-Job基础上,也可以放在其它项⽬中)1.新建⼀个Maven项⽬,命名为blog-xxl-job。
2.导⼊Maven依赖<!-- https:///artifact/com.xuxueli/xxl-job-core --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>3.新建application.yml配置⽂件并添加如下内容#eurekaeureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/# web portserver.port=8081# no web#spring.main.web-environment=false# log configlogging.config=classpath:logback.xml### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin### xxl-job, access tokenxxl.job.accessToken=### xxl-job executor appnamexxl.job.executor.appname=blog-xxl-job-executor### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is nullxxl.job.executor.address=### xxl-job executor server-infoxxl.job.executor.ip=xxl.job.executor.port=9999### xxl-job executor log-pathxxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler### xxl-job executor log-retention-daysxxl.job.executor.logretentiondays=30可以不⽤eureka,这⾥我的项⽬中⽤到eureka所以增加该配置。
《分布式任务调度平台XXL-JOB》手册

《分布式任务调度平台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作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
xxl-job介绍

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实现分布式调度任务的方法及系统,属于计算机软件开发技术领域。
本技术的基于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》手册范本

《分布式任务调度平台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://gitee./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作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
xxl-job的一些感悟与规范

xxl-job的⼀些感悟与规范后台计划任务设计思路:1. ⽇志埋点处理,便于prd排查问题2. 2种主动job搭配规范(正向job、反查job)3. 1种消息接收的处理规范,重试机制,返回状态4. job开关维度5. 数据流图6. 线上暗job-便捷性-⼯具job7. 处理流⽔表的设计8. 分布式多副本考虑⼀⼀说来⽇志埋点处理,便于prd排查问题prd环境由于会受到严格管控,因此不可能让你idea直接连接jvm instance调试,⼀般来说,都是需要通过查数据或者查⽇志来看有没有执⾏,执⾏有没有报错,怎样的报错也就是说此时的⽇志信息越完善越好,并且⼈类看了需要显⽽易懂,不需要倒腾来倒腾去,这样的⽇志信息给到的话,对开发⼈员来说是最友好的因此埋点很重要,⽇志信息要详尽,越详尽越好,⽐如搜索出来的List size这些信息都要有,⽽不光是错误⽇志,记住越详尽越好,每个if/else节点的记录都要有上⾯是记录,也就是⽇志埋点要想尽,但是⼈类需要interface才能查看到这些⽇志信息,因此⽇志的搜索也很重要,如:kibana等,因此针对kibana设计⽇志格式也很重要,⽇志记录时就要考虑到查看的友好性,不要⽇志记了,就是不好查。
就⿇烦了也可以是⽇志记录归记录,中间加个处理切分丰富⽇志的表⽰环节也可以,到查看端能更易且更丰富的表现形式。
避免由于⽇志不详尽导致需要重新发布程序才能细化查问题现象出现。
2种主动job搭配规范(正向job、反查job)当需要和三⽅系统做对接时,⼀般是我⽅get/post请求到对⽅系统,这个调⽤⽅式我称为正向调⽤如果出现⽹络不通、或者对⽅系统正在发布⽽500报错了怎么办?如果调⽤结果返回的是部分完成状态怎么办?⽐如我⽅系统把订单post到三⽅做业务,对⽅系统可能做了半同步半异步拆分,导致返回的业务状态为:部分完成。
⽽我们的系统依赖于这个业务返回完整完成状态后才能进⾏后续操作,同时我们也不想重复post订单到对⽅系统时,怎么办?这时引⼊反查job,专门⽤来定时到对⽅系统查询业务最新状态(此时依赖对⽅系统有这种业务查询api供我⽅调⽤)也就是写2个job,管你是否存在⽹络问题啥的,统统能考虑的到(对⽅系统api需要提供+⾃⾝状态机的流转(如⽹络不通时就不应该让反查job查了,因为根本还没有post订单过去))1种消息接收的处理规范,重试机制,返回状态有时,对⽅系统会主动通知业务的状况,可能是⼀次性的也可能是对⽅系统⽤了定时器定期推送的此时,就需要和对⽅对应好是怎样的通知机制了,多次通知,可能需要做幂等也可能约定好我⽅系统返回怎样的json内容,对⽅将终⽌推送等等此时幂等必须要做了,因为从设计⾓度讲,总是需要将外部系统设定为不可靠系统对待。
xxl-job之实现流程任务编排思路

xxl-job之实现流程任务编排思路背景 某⼀天⼀如既往的上班”旅途“中,我的领导在开早会的时候,说我最近没啥事,于是让我研究⼀下Activiti⼯作流引擎与Drools规则引擎,当时也不知道后边具体要做什么,管它的,先看看再说。
看了⼏天后,写了个简单的demo出来,结果发现Activiti这个东西不就是可以⽤来做流程审批的嘛;最后我们就开始开发基于Activiti的⼯作流引擎。
并且部分功能与定时任务调度中⼼进⾏整合,实现了简单的流程编排任务。
因为⼯作流相关的东西在公司的电脑上,公司对于安全保密性⼗分严格,所以本⽂不阐述具体实现,只记录⼀下我当时的实现思路。
调度中⼼本⾝有⼀个⼦任务的概念,但⼦任务是有先后顺序的,所以这⾥不太符合需求。
在xxl-job的github上我看到过这样⼀个issue:看来还是很多⼈想要这个功能呢,⽬前我们先⾃⼰实现⼀个简单的流程任务编排。
实现思路概念描述 因为涉及到了⼯作流的东西,在此处只简单介绍⼀下Activiti⼯作流引擎。
⼯作流(WorkFlow),就是”业务过程的部分或整体在计算机应⽤环境下的⾃动化“,它主要解决的是”使在多个参与者之间按照某种预定义的规则传递⽂档、信息或任务的过程⾃动进⾏,从⽽实现某个预期的业务⽬标,或者促使此⽬标的实现“,简单的说:⼯作流将⼀套⼤的业务逻辑分解成业务逻辑段,并统⼀控制这些业务逻辑段的执⾏条件,执⾏顺序以及相互通信。
实现业务逻辑的分解和解耦。
关键概念:服务节点:⽤户任务,服务任务,接受任务,脚本任务等⽹关节点:互斥⽹关,并⾏⽹关等逻辑判断节点:类似于if/else 我们在⼯作流的开发中主要是包装了服务节点以及⽹关节点和逻辑节点等内容,让服务节点类似于⼀个http⽹络请求,触发微服务的接⼝,同时等待微服务接⼝返回内容,放⼊到流程中,执⾏后边的流程。
思路设计 我在开发调度中⼼的⼯作流模式时时通过SDK的⽅式引⼊⼯作流模式,减少系统间的耦合,实现⼯作流模式后可以做⼀些简单的编排任务,⽐如多个Jobhandler的组合执⾏⽅式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
执行器服务 jetty
调度请求 queue
回调服务 执行线程 回调日志 queue 任务
调度日志 / GLUE日志
调度中心
执行器
XXL-JOB架构图 v1.3
执行器
注册模块
注册模块 调度请求 queue
JobHandler
…… 调度器 quartz
执行器服务 jetty
调度池
回调服务 执行线程 回调日志 queue 任务
调度日志 / GLUE日志
调度中心
执行器
XXL-JOB架构图 v1.5
任务管理 执行器 任务模式 JobHandler
执行器管理 注册方式 AppName 机器地址列表
调度器 (quartz)
执行器服务( jetty)
调度请求 (queue)
……
日志管理 调度日志 Rolling日志 GLUE版本日志
JobHandler
回调服务 (API)
回调线程
调度结果 (queue)
任务线程
……
数据中心 调度中心
注册服务 (API)
注册线程
自研RPC
执行器
XXL-JOB架构图 v1.8
意义:
调度中心
分 片 任 务 分片参数:0, 3 分片参数:1, 3 分片参数:2, 3 执行器集群
执行器0 执行器1 执行器2
……
其他 运行报表 失败告警 任务依赖 ……
Rolling日志 (实时)
日志服务 ( jetty)
执行日志 (Log文件)
JobHandler
回调服务 (API)
回调线程
调度结果 (queue)
任务线程
……
数据中心 调度中心
注册服务 (API)
自动注册
自研RPC
执行器
XXL-JOB架构图 v1.7
任务管理 执行器 任务模式 JobHandler
执行器管理 注册方式 AppName 机器地址列表
调度器 (quartz)
执行器服务( jetty)
调度请求 (queue)
……
日志管理 调度日志 Rolling日志 GLUE版本日志
……
其他 运行报表 失败告警 任务依赖 ……
Rolling日志 (实时)
日志服务 ( jetty)
执行日志 (Log文件)
1 ~ 10000 10001 ~ 20000 20001 ~ 30000
1、协同处理大量数据 2、动态扩容,动态分片
注 册 中
调度器A 【block】 宴会商户头图绑定JOB 婚宴默认搜索排序跑分JOB …… 任务池 调度器B 【block】 调度器C 【active】
调度请求 调度请求 …… 调度队列
调度日志
任务执行 【业务逻辑】
调度中心
执行器
XXL-JOB架构图 v1.1
执行器地址
JobHandler
…… 调度池
调度器 quartz