xxl-job介绍以及搭建过程

x33g5p2x  于2021-12-21 转载在 其他  
字(2.8k)|赞(0)|评价(0)|浏览(796)
1、xxl-job简介:

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

2、xxl-job架构设计
设计思想

调度中心负责发起调度请求,但是自身并不承担业务逻辑。
执行器负责接收调度请求并执行对应的JobHandler中业务逻辑(任务都抽象成分散的JobHandler)。
调度任务两部分解耦合,提高系统整体稳定性和扩展性。

系统组成

调度中心: 负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性; 支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,同时支日志功能。
执行器: 负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效; 接收“调度中心”的执行请求、终止请求和日志请求等。

架构图

3、xxl-job、springboot搭建
1) 先下载xxl-job

项目下载地址github下载地址

2)初始化数据库

找到数据库建表代码,分别执行

3)导入源码,整理源码,编译源码

idea编译快捷键ctrl+f9

4)配置调度中心

配置的文件夹

如果前端是要重新写的话就可以不用配置freemarker了,如果需要在xxl-job自带的前端页面修改业务那么就需要配置freemarker了

5)修改执行器代码

在执行器模块代码下面提供了四个jobHandler(运行模式为 "BEAN模式" 时生效,我们就是用这种方式

当然可以自己自定义jobHandler(要继承IJobHandler和贴上@JobHandler标签),我们这里主要使用HttpJopHandler,所以只是在这个上面改动。

5)配置执行器属性

# 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
# 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
#执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
#执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=
4、部署、运行xxl-job项目
1) 部署运行调度中心
可以直接运行调度中心

如果使用项目自带的前端页面,那么访问http://localhost:8080/xxl-job-admin
账号密码:admin/123456

通过maven打包,通过docker部署调度中心(执行器的调度中心地址需要修改)

下载镜像
下载镜像
docker pull docker.io/tomcat
启动容器
docker run -d --name xxl-job-admin --privileged=true -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime -d -p 8080:8080 docker.io/tomcat
上传调度中心war包,把war包复制到容器xxl-job-admin的webapps下面
docker cp xxl-job-admin.war xxl-job-admin:/usr/local/tomcat/webapps
重启容器即可
docker restart xxl-job-admin
参数说明
-d 表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p 表示宿主机(8081)与容器的端口映射(8080,Tomcat容器固定的端口为8080,必须映射到8080)
–name 表示容器名称,用一个有意义的名称命名即可。
-v 表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
-e 运行上海时区格式
–privileged=true 开启特权,可以设置容器里的内核参数
-e TZ=“Asia/Shanghai” -v /etc/localtime:/etc/localtime都是用来解决容器时区的问题
当然也可以进入容器修改时区
重启容器即可docker restart xxl-job-admin`

2) 部署运行执行器

可以直接运行,也可以通过docker部署
启动容器
docker run -d --name xxl-job-executor --privileged=true -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime -d -p 8081:8080 docker.io/tomcat
上传调度中心war包,把war包复制到容器xxl-job-admin的webapps下面
docker cp xxl-job-executor.war xxl-job-executor:/usr/local/tomcat/webapps
重启容器即可
docker restart xxl-job-executor

5、xxl-job项目一些解释

在调度中心中新建或者修改任务,会让选择执行器、路由策略、阻塞策略、运行模式、任务超时时间、失败重试的次数以及cron等。

基于我这边的项目需求,我们项目的前端页面是重新开发的,那么我们把任务超时时间、负责人、失败重试次数、运行模式、jobHandler的名称、路由策略都采用默认的配置,并且多加了任务名称等字段。用户只要输入任务名称、任务描述、执行器即可。子任务id、负责人、报警邮件我们不填写。

路由策略:本项目默认选择CONSISTENT_HASH(一致性HASH),每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
运行模式:本项目使用BEAN模式,在BEAN模式下才能使用JobHandler任务。
阻塞处理策略:采用单机串行模式,调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行。
任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务,我们使用300秒。
失败重试次数:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试,我们默认使用1次。

相关文章