请选择 进入手机版 | 继续访问电脑版

分布式任务调度框架xxljob2.2.0详细安装使用教程

[复制链接]
小小海 发表于 2021-1-1 18:34:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
分布式任务调理框架xxljob2.2.0详细安装使用教程



简介

概述

XXL-JOB是一个分布式任务调理平台,其焦点设计目标是开辟迅速、学习简朴、轻量级、易扩展。现已开放源代码并接入多家公司线上产物线,开箱即用。
特性


  • 简朴:支持通过Web页面对任务进行CRUD操纵,操纵简朴,一分钟上手。
  • 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效。
  • 调理中心HA(中心式):调理接纳中心式设计,“调理中心”自研调理组件并支持集群摆设,可包管调理中心HA。
  • 执行器HA(分布式):任务分布式执行,任务”执行器”支持集群摆设,可包管任务执行HA。
  • 注册中心: 执行器会周期性自动注册任务, 调理中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器所在。
  • 弹性扩容缩容:一旦有新执行器机器上线大概下线,下次调理时将会重新分配任务。
  • 触发策略:提供丰富的任务触发策略,包罗:Cron触发、固定隔断触发、固定延时触发、API(事件)触发、人工触发、父子任务触发。
  • 调理逾期策略:调理中心错过调理时间的赔偿处置惩罚策略,包罗:忽略、立刻赔偿触发一次等。
  • 阻塞处置惩罚策略:调理过于麋集,执行器来不及处置惩罚时的处置惩罚策略,策略包罗:单机串行(默认)、抛弃后续调理、覆盖之前调理。
  • 任务超时控制:支持自界说任务超时时间,任务运行超时将会主动中断任务。
  • 任务失败重试:支持自界说任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试 。
  • 任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式
  • 路由策略:执行器集群摆设时提供丰富的路由策略,包罗:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、繁忙转移等。
  • 分片广播任务:执行器集群摆设时,任务路由策略选择”分片广播”情况下,一次任务调理将会广播触发集群中所有执行器执行一次任务,可根据分片参数开辟分片任务。
  • 动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处置惩罚;在进行大数据量业务操纵时可显著提升任务处置惩罚能力和速度。
  • 故障转移:任务路由策略选择”故障转移”情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调理请求。
  • 任务进度监控:支持实时监控任务进度。
  • Rolling实时日志:支持在线查察调理效果,而且支持以Rolling方式实时查察执行器输出的完整的执行日志。
  • GLUE:提供Web IDE,支持在线开辟任务逻辑代码,动态发布,实时编译生效,省略摆设上线的过程。支持30个版本的汗青版本回溯。
  • 脚本任务:支持以GLUE模式开辟和运行脚本任务,包罗Shell、Python、NodeJS、PHP、PowerShell等范例脚本。
  • 下令行任务:原生提供通用下令行任务Handler(Bean任务,”CommandJobHandler”);业务方只需要提供下令行即可。
  • 任务依赖:支持设置子任务依赖,当父任务执行结束且执行乐成后将会主动触发一次子任务的执行, 多个子任务用逗号分隔。
  • 一致性:“调理中心”通过DB锁包管集群分布式调理的一致性, 一次任务调理只会触发一次执行。
  • 自界说任务参数:支持在线设置调理任务入参,即时生效。
  • 调理线程池:调理系统多线程触发调理运行,确保调理准确执行,不被堵塞。
  • 数据加密:调理中心和执行器之间的通讯进行数据加密,提升调理信息安全性。
  • 邮件报警:任务失败时支持邮件报警,支持设置多邮件所在群发报警邮件
  • 推送maven中央堆栈: 将会把最新稳定版推送到maven中央堆栈, 方便用户接入和使用。
  • 运行报表:支持实时查察运行数据,如任务数量、调理次数、执行器数量等;以及调理报表,如调理日期分布图,调理乐成分布图等。
  • 全异步:任务调理流程全异步化设计实现,如异步调理、异步运行、异步回调等,有效对麋集调理进行流量削峰,理论上支持任意时长任务的运行。
  • 跨语言:调理中心与执行器提供语言无关的 RESTful API 服务,第三方任意语言可据此对接调理中心大概实现执行器。除此之外,还提供了 “多任务模式”和“httpJobHandler”等其他跨语言方案。
  • 国际化:调理中心支持国际化设置,提供中文、英文两种可选语言,默认为中文。
  • 容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产物开箱即用。
  • 线程池隔离:调理线程池进行隔离拆分,慢任务自动降级进入”Slow”线程池,制止耗尽调理线程,提高系统稳定性。
  • 用户管理:支持在线管理系统用户,存在管理员、平凡用户两种脚色。
  • 权限控制:执行器维度进行权限控制,管理员拥有全量权限,平凡用户需要分配执行器权限后才允许相关操纵。
总体设计

源码目次介绍


  1. /data/xxljob/xxl-job-2.2.0/├── doc│   ├── db│   ├── images│   ├── XXL-JOB官方文档.md│   ├── XXL-JOB架构图.pptx│   └── XXL-JOB-English-Documentation.md├── LICENSE├── NOTICE├── pom.xml├── README.md├── xxl-job-admin //调理中心,项目源码│   ├── Dockerfile│   ├── pom.xml│   └── src├── xxl-job-core  //公共Jar依赖│   ├── pom.xml│   └── src└── xxl-job-executor-samples //执行器,Sample示例项目。我们可以在该项目上进行开辟,也可以将现有项目改造生成执行器项目    ├── pom.xml    ├── xxl-job-executor-sample-frameless //无框架版本    ├── xxl-job-executor-sample-jboot //Jboot版本,通过Jboot管理执行器    ├── xxl-job-executor-sample-jfinal //JFinal版本,通过JFinal管理执行器    ├── xxl-job-executor-sample-nutz //Nutz版本,通过Nutz管理执行器    ├── xxl-job-executor-sample-spring //Spring版本,通过Spring容器管理执行器,比力通用    └── xxl-job-executor-sample-springboot //Springboot版本,通过Springboot管理执行器,推荐这种方式
复制代码
“调理数据库”设置

XXL-JOB调理模块基于自研调理组件并支持集群摆设,调理数据库表说明如下:
  

  • xxl_job_lock:任务调理锁表;
  • xxl_job_group:执行器信息表,维护任务执行器信息;
  • xxl_job_info:调理扩展信息表: 用于生存XXL-JOB调理任务的扩展信息,如任务分组、任务名、机器所在、执行器、执行入参和报警邮件等等;
  • xxl_job_log:调理日志表: 用于生存XXL-JOB任务调理的汗青信息,如调理效果、执行效果、调理入参、调理机器和执行器等等;
  • xxl_job_log_report:调理日志报表:用户存储XXL-JOB任务调理日志的报表,调理中心报表功能页面会用到;
  • xxl_job_logglue:任务GLUE日志:用于生存GLUE更新汗青,用于支持GLUE的版本回溯功能;
  • xxl_job_registry:执行器注册表,维护在线的执行器和调理中心机器所在信息;
  • xxl_job_user:系统用户表;
架构设计

设计思想

将调理行为抽象形成“调理中心”公共平台,而平台自身并不负担业务逻辑,“调理中心”负责发起调理请求。
将任务抽象身分散的JobHandler,交由“执行器”统一管理,“执行器”负责吸收调理请求并执行对应的JobHandler中业务逻辑。
因此,“调理”和“任务”两部门可以相互解耦,提高系统整体稳定性和扩展性。
系统组成



  • 调理模块(调理中心)
    负责管理调理信息,按照调理设置发出调理请求,自身不负担业务代码。调理系统与任务解耦,提高了系统可用性和稳定性,同时调理系统性能不再受限于任务模块;
    支持可视化、简朴且动态的管理调理信息,包罗任务新建,更新,删除,GLUE开辟和任务报警等,所有上述操纵都会实时生效,同时支持监控调理效果以及执行日志,支持执行器Failover。
  • 执行模块(执行器)
    负责吸收调理请求并执行任务逻辑。任务模块专注于任务的执行等操纵,开辟和维护更加简朴和高效;
    吸收“调理中心”的执行请求、终止请求和日志请求等。
架构图


安装

情况

官网要求预安装情况
  1. Maven3+Jdk1.8+Mysql5.7+
复制代码
本机情况


我这里是安装好了jdk和maven的,如果有需要的可以参考centos8使用war包安装摆设jenkins以及初始化设置这篇文章,这个内里有详细的安装以及设置步调。

MySQL我安装的是8.0.21版本的,如果有需要,可以参考centos8安装MySQL8,内里有详细的安装已经设置步调。
创建目次

  1. [root@dxm31 ~]# mkdir -p /data/xxljob[root@dxm31 ~]# cd /data/xxljob/
复制代码
下载

  1. [root@dxm31 xxljob]# wget https://github.com/xuxueli/xxl-job/archive/v2.2.0.tar.gz[root@dxm31 xxljob]# ll -h
复制代码

解压

  1. [root@dxm31 xxljob]# tar -zxvf v2.2.0.tar.gz
复制代码

初始化调理数据库

“调理数据库初始化SQL脚本” 位置为:/xxl-job/doc/db/tables_xxl_job.sql。
调理中心支持集群摆设,集群情况下各节点务必毗连同一个mysql实例;
如果mysql做主从,调理中心集群节点务必强制走主库;
调理数据库表说明

  xxl_job_info:调理扩展信息表: 用于生存XXL-JOB调理任务的扩展信息,如任务分组、任务名、机器所在、执行器、执行入参和报警邮件等等;
xxl_job_log:调理日志表: 用于生存XXL-JOB任务调理的汗青信息,如调理效果、执行效果、调理入参、调理机器和执行器等等;
xxl_job_log_report:调理日志报表:用户存储XXL-JOB任务调理日志的报表,调理中心报表功能页面会用到;
xxl_job_logglue:任务GLUE日志:用于生存GLUE更新汗青,用于支持GLUE的版本回溯功能;
xxl_job_registry:执行器注册表,维护在线的执行器和调理中心机器所在信息;
xxl_job_group:执行器信息表,维护任务执行器信息;
xxl_job_user:系统用户表;
xxl_job_lock:任务调理锁表;
我们可以通过mysql -uroot -p123456 < /data/xxljob/xxl-job-2.2.0/doc/db/tables_xxl_job.sql这种操纵来初始化数据库,也可以通过用navicat工具导入再执行sql这种操纵来初始化数据库,大家任意选择,怎么方便怎么来。

设置摆设"调理中心"(xxl-job-admin)

调理中心作用:统一管理任务调理平台上调理任务,负责触发调理执行,而且提供任务管理平台。
修改application.properties设置文件

调理中心设置文件所在:/xxl-job/xxl-job-admin/src/main/resources/application.properties
修改此设置文件
  1. [root@dxm31 ~]# vim /data/xxljob/xxl-job-2.2.0/xxl-job-admin/src/main/resources/application.properties
复制代码
内容如下:
  1. ### webserver.port=8082server.context-path=/xxl-job-admin### actuatormanagement.server.servlet.context-path=/actuatormanagement.health.mail.enabled=false### resourcesspring.mvc.servlet.load-on-startup=0spring.mvc.static-path-pattern=/static/**spring.resources.static-locations=classpath:/static/### freemarkerspring.freemarker.templateLoaderPath=classpath:/templates/spring.freemarker.suffix=.ftlspring.freemarker.charset=UTF-8spring.freemarker.request-context-attribute=requestspring.freemarker.settings.number_format=0.############# mybatismybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml#mybatis.type-aliases-package=com.xxl.job.admin.core.model### xxl-job, datasource 调理中心JDBC链接:链接所在请保持和 2.1章节 所创建的调理数据库的所在一致spring.datasource.url=jdbc:mysql://192.168.0.22:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver### datasource-poolspring.datasource.type=com.zaxxer.hikari.HikariDataSourcespring.datasource.hikari.minimum-idle=10spring.datasource.hikari.maximum-pool-size=30spring.datasource.hikari.auto-commit=truespring.datasource.hikari.idle-timeout=30000spring.datasource.hikari.pool-name=HikariCPspring.datasource.hikari.max-lifetime=900000spring.datasource.hikari.connection-timeout=10000spring.datasource.hikari.connection-test-query=SELECT 1### xxl-job email 报警邮箱spring.mail.host=smtp.qq.comspring.mail.port=25spring.mail.username=xxx@qq.comspring.mail.password=xxxspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=truespring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory### xxl-job, access token 调理中心通讯TOKEN [选填]:非空时启用;xxl.job.accessToken=### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") 调理中心国际化设置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;xxl.job.i18n=zh_CN## xxl-job, triggerpool max size 调理线程池最大线程设置【必填】xxl.job.triggerpool.fast.max=200xxl.job.triggerpool.slow.max=100### xxl-job, log retention days 调理中心日志表数据生存天数 [必填]:逾期日志自动清理;限制大于便是7时生效,否则, 如-1,关闭自动清理功能;xxl.job.logretentiondays=30
复制代码
其中web 端口默认是8080,如果有辩论,一定要更换(本文接纳8082,因为8080是tomcat服务,8081是maven私服。),别的spring.datasource.url注意一下这里的IP,如果不是127.0.0.1,也一定要更换。
修改logback.xml(指定xxl-job的日志路径)

查察一下默认设置日志路径:

默认日志路径为:/data/applogs/xxl-job/xxl-job-admin.log,我们改为/data/xxl-job/xxl-job-admin.log。
操纵步调:
  1. [root@dxm31 ~]# vim /data/xxljob/xxl-job-2.2.0/xxl-job-admin/src/main/resources/logback.xml
复制代码
修改以下内容:
  1. [/code] [align=center][img]https://img-blog.csdnimg.cn/20201228113402353.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc5ODI4OA==,size_16,color_FFFFFF,t_70[/img][/align]
  2. [size=5]设置摆设"执行器项目"[/size]
  3. “执行器”项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)。
  4. 作用:负责吸收“调理中心”的调理并执行;可直接摆设执行器,也可以将执行器集成到现有业务项目中。
  5. [size=4]修改执行器设置文件[/size]
  6. 我们以 springboot 版本为例,要修改的设置文件路径为:xxl-job-2.2.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
  7. [code][root@dxm31 ~]# vim /data/xxljob/xxl-job-2.2.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
复制代码
修改内容如下:
  1. # web portserver.port=8083# 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:8082/xxl-job-admin### xxl-job, access token 执行器通讯TOKEN [选填]:非空时启用;xxl.job.accessToken=### xxl-job executor appname 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册xxl.job.executor.appname=xxl-job-executor-sample### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null 执行器注册 [选填]:优先使用该设置作为注册所在,为空时使用内嵌服务 ”IP:PORT“ 作为注册所在。从而更机动的支持容器范例执行器动态IP和动态映射端口问题。xxl.job.executor.address=### xxl-job executor server-info 执行器IP [选填]:默认为空体现自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;所在信息用于 "执行器注册" 和 "调理中心请求并触发任务";xxl.job.executor.ip=### 执行器端口号 [选填]:小于便是0则自动获取;默认端口为9999,单机摆设多个执行器时,注意要设置差别执行器端口;xxl.job.executor.port=9999### xxl-job executor log-path 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;xxl.job.executor.logpath=/data/xxl-job/jobhandler### xxl-job executor log-retention-days 执行器日志文件生存天数 [选填] : 逾期日志自动清理, 限制值大于便是3时生效; 否则, 如-1, 关闭自动清理功能;xxl.job.executor.logretentiondays=30
复制代码
其中web 端口默认是8081,如果有辩论,一定要更换(本文接纳8083)
修改logback.xml(指定xxl-job的日志路径)

查察一下默认设置日志路径:

默认日志路径为:/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log,我们改为/data/xxl-job/xxl-job-executor-sample-springboot.log。
操纵步调:
  1. [root@dxm31 ~]# vim /data/xxljob/xxl-job-2.2.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml
复制代码
修改以下内容:
  1. [/code] [align=center][img]https://img-blog.csdnimg.cn/20201228114957350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc5ODI4OA==,size_16,color_FFFFFF,t_70[/img][/align]
  2. [size=5]打包摆设项目[/size]
  3. 如果已经正确进行上述设置,可将项目编译打包摆设。
  4. [code][root@dxm31 ~]# cd /data/xxljob/xxl-job-2.2.0/[root@dxm31 xxl-job-2.2.0]# mvn clean install
复制代码

看到这个证明项目编译打包完成。
查察一下xxl-job-admin/target/下面是否有xxl-job-admin-2.2.0.jar:
  1. [root@dxm31 xxl-job-2.2.0]# ll xxl-job-admin/target/
复制代码

查察一下xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/下面是否有xxl-job-executor-sample-springboot-2.2.0.jar:
  1. [root@dxm31 xxl-job-2.2.0]# ll xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/
复制代码

启动

启动调理中心

启动调理中心下令:nohup java -jar xxl-job-admin/target/xxl-job-admin-2.2.0.jar &
  1. [root@dxm31 xxl-job-2.2.0]# nohup java -jar xxl-job-admin/target/xxl-job-admin-2.2.0.jar &
复制代码

查察历程以及端口监听情况:
  1. [root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-admin[root@dxm31 xxl-job-2.2.0]# netstat -ntlp | grep 8082
复制代码

我们用欣赏器访问一下http://IP+端口,我们这里是http://192.168.0.31:8082/xxl-job-admin

默认登录账号 “admin/123456”, 登录后运行界面如下图所示:

至此“调理中心”项目已经摆设乐成。
启动执行器

启动执行器下令:nohup java -jar xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.2.0.jar &
  1. [root@dxm31 xxl-job-2.2.0]# nohup java -jar xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.2.0.jar &
复制代码

查察历程以及端口监听情况:
  1. [root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-executor-sample-springboot[root@dxm31 xxl-job-2.2.0]# netstat -ntlp | grep 8083
复制代码

至此“执行器”项目已经摆设结束。
参加systemctl管理并设置开机自启动

创建启动调理中心的启动脚本

  1. #  创建/usr/local/xxl-job目次,用于存放jar包和启动脚本[root@dxm31 ~]# mkdir -p /usr/local/xxl-job# 将编译打包后的xxl-job-admin-2.2.0.jar复制到/usr/local/xxl-job目次下[root@dxm31 ~]# cp /data/xxljob/xxl-job-2.2.0/xxl-job-admin/target/xxl-job-admin-2.2.0.jar /usr/local/xxl-job/# 创建启动脚本并编写内容[root@dxm31 ~]# vim /usr/local/xxl-job/startadmin.sh#!/bin/shnohup /usr/local/jdk/bin/java -jar /usr/local/xxl-job/xxl-job-admin-2.2.0.jar >> ./nohup.out 2>&1 &# 给启动脚本增加可执行权限[root@dxm31 ~]# chmod +x /usr/local/xxl-job/startadmin.sh
复制代码
将调理中心参加systemctl管理

创建xxl-job-admin.service服务文件

创建xxl-job-admin.service服务文件
  1. [root@dxm31 ~]# vim /etc/systemd/system/xxl-job-admin.service
复制代码
内容如下:
  1. [Unit]Description=xxl-job-admin serverAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingUser=rootGroup=rootExecStart=sh /usr/local/xxl-job/startadmin.shPrivateTmp=true[Install]WantedBy=multi-user.target
复制代码
重新加载服务列表

  1. [root@dxm31 ~]# systemctl daemon-reload
复制代码
启动服务

  1. # 停止上面手动后台启动的xxl-job-admin服务[root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-adminroot        4812  0.7 15.1 4542108 582008 pts/0  Sl   12:12   0:28 java -jar xxl-job-admin/target/xxl-job-admin-2.2.0.jarroot        5778  0.0  0.0  12320  1068 pts/0    R+   13:14   0:00 grep --color=auto xxl-job-admin[root@dxm31 xxl-job-2.2.0]# kill -9 4812# 查抄是否还存在xxl-job-admin历程[root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-adminroot        5789  0.0  0.0  12320  1084 pts/0    S+   13:15   0:00 grep --color=auto xxl-job-admin# 查询所有服务单元是否有xxl-job-admin[root@dxm31 xxl-job-2.2.0]# systemctl list-unit-files | grep xxl-job-adminxxl-job-admin.service                      disabled# 存在,且非开启自启动,使用systemctl启动xxl-job-admin服务[root@dxm31 xxl-job-2.2.0]# systemctl start xxl-job-admin.service# 查察nginx服务状态[root@dxm31 xxl-job-2.2.0]# systemctl status xxl-job-admin.service
复制代码

Active: active (running) 可以看到xxl-job-admin服务已经启动乐成。查察历程以及端口的监听情况:
  1. [root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-admin[root@dxm31 xxl-job-2.2.0]# netstat -ntlp | grep 8082
复制代码

欣赏器访问http://192.168.0.31:8082/xxl-job-admin

将调理中心设置为开机自启动

  1. [root@dxm31 xxl-job-2.2.0]# systemctl list-unit-files | grep xxl-job-admin.servicexxl-job-admin.service                      disabled# disabled体现非开机自启动# 设置为开机自启动[root@dxm31 xxl-job-2.2.0]# systemctl enable xxl-job-admin.serviceCreated symlink /etc/systemd/system/multi-user.target.wants/xxl-job-admin.service → /etc/systemd/system/xxl-job-admin.service.# 再次查察[root@dxm31 xxl-job-2.2.0]# systemctl list-unit-files | grep xxl-job-admin.servicexxl-job-admin.service                      enabled# enabled体现是开机自启动,执行重启下令[root@dxm31 xxl-job-2.2.0]# reboot#重启后再次查察xxl-job-admin服务已启动完成。
复制代码
创建启动执行器的启动脚本

  1. # 将编译打包后的xxl-job-executor-sample-springboot-2.2.0.jar复制到/usr/local/xxl-job目次下[root@dxm31 xxl-job-2.2.0]# cp /data/xxljob/xxl-job-2.2.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.2.0.jar /usr/local/xxl-job/# 创建启动脚本并编写内容[root@dxm31 xxl-job-2.2.0]# vim /usr/local/xxl-job/startexecutor.sh#!/bin/shnohup /usr/local/jdk/bin/java -jar /usr/local/xxl-job/xxl-job-executor-sample-springboot-2.2.0.jar >> ./nohup.out 2>&1 &# 给启动脚本增加可执行权限[root@dxm31 xxl-job-2.2.0]# chmod +x /usr/local/xxl-job/startexecutor.sh
复制代码
将执行器参加systemctl管理

创建xxl-job-executor.service服务文件

创建xxl-job-executor.service服务文件
  1. [root@dxm31 xxl-job-2.2.0]# vim /etc/systemd/system/xxl-job-executor.service
复制代码
内容如下:
  1. [Unit]Description=xxl-job-executor serverAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingUser=rootGroup=rootExecStart=sh /usr/local/xxl-job/startexecutor.shPrivateTmp=true[Install]WantedBy=multi-user.target
复制代码
重新加载服务列表

  1. [root@dxm31 xxl-job-2.2.0]# systemctl daemon-reload
复制代码
启动服务

  1. # 停止上面手动后台启动的执行器服务[root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-executor-sample-springbootroot        6953  291  9.0 4518132 349104 pts/0  Sl   14:20   0:08 java -jar xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.2.0.jarroot        6999  0.0  0.0  12320  1088 pts/0    S+   14:20   0:00 grep --color=auto xxl-job-executor-sample-springboot[root@dxm31 xxl-job-2.2.0]# kill -9 6953# 查抄是否还存在执行器历程[root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-executor-sample-springbootroot        7016  0.0  0.0  12320  1068 pts/0    S+   14:22   0:00 grep --color=auto xxl-job-executor-sample-springboot# 查询所有服务单元是否有执行器[root@dxm31 xxl-job-2.2.0]# systemctl list-unit-files | grep xxl-job-executor.servicexxl-job-executor.service                   disabled# 存在,且非开启自启动,使用systemctl启动执行器服务[root@dxm31 xxl-job-2.2.0]# systemctl start xxl-job-executor.service# 查察nginx服务状态[root@dxm31 xxl-job-2.2.0]# systemctl status xxl-job-executor.service
复制代码

Active: active (running) 可以看到执行器服务已经启动乐成。查察历程以及端口的监听情况:
  1. [root@dxm31 xxl-job-2.2.0]# ps aux | grep xxl-job-executor-sample-springboot[root@dxm31 xxl-job-2.2.0]# netstat -ntlp | grep 8083
复制代码

将执行器设置为开机自启动

  1. [root@dxm31 xxl-job-2.2.0]# systemctl list-unit-files | grep xxl-job-executor.servicexxl-job-executor.service                   disabled# disabled体现非开机自启动# 设置为开机自启动[root@dxm31 xxl-job-2.2.0]# systemctl enable xxl-job-executor.serviceCreated symlink /etc/systemd/system/multi-user.target.wants/xxl-job-executor.service → /etc/systemd/system/xxl-job-executor.service.# 再次查察[root@dxm31 xxl-job-2.2.0]# systemctl list-unit-files | grep xxl-job-executor.servicexxl-job-executor.service                   enabled# enabled体现是开机自启动,执行重启下令[root@dxm31 xxl-job-2.2.0]# reboot#重启后再次查察执行器服务已启动完成。
复制代码
开辟第一个任务“Hello World”

任务运行模式主要有Bean模式和Gule模式(明白为脚本)。下面我们就分别以这两种差别的运行模式分别开辟一个任务。
Gule模式

“GLUE模式(Java)”的执行代码托管到调理中心在线维护,相比“Bean模式任务”需要在执行器项目开辟摆设上线,更加轻便轻量。
  前提:请确认“调理中心”和“执行器”项目已经乐成摆设并启动!!!!
原理: 每个 “GLUE模式(Java)” 任务的代码,实际上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”吸收到“调理中心”的调理请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
下面开始介绍一下详细的步调:
第一步:新建任务
登录调理中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数设置,点击生存。


从这个图,大家可以发现,cron表达式的编写更加方便了。
点击生存之后,弹出:

点击确定。

这个就是我们上面新建的任务。

从任务管理列表截图可以看出比之前增加了根据状态、任务形貌以及负责人这三个搜索项。
第二步:“GLUE模式(Java)” 任务开辟

我们在我们上面新建任务『测试』这列操纵选择GLUE IDE,进入 “GLUE编辑器开辟界面” ,见下图。“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印Hello World。

我们简朴改变一下这段示例代码,在log背面加上当前时间,然后点击生存,输入源码备注,生存乐成。
版本回溯功能(支持30个版本的版本回溯):在GLUE任务的Web IDE界面,选择右上角下拉框“版本回溯”,会列出该GLUE的更新汗青,选择相应版本即可显示该版本代码,生存后GLUE代码即回退到对应的汗青版本;
  1. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                XxlJobLogger.log("XXL-JOB, Hello World."+df.format(System.currentTimeMillis()));
复制代码
注意:要导入需要的包,否则会执行失败。
  1. import java.text.SimpleDateFormat;import java.util.Date;
复制代码
见下图:

GLUE模式(Java):任务以源码方式维护在调理中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 “groovy” 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务。
第三步:触发执行
点击任务右侧操纵下面的 “执行一次” 按钮,可手动触发一次任务执行(通常情况下,通过设置Cron表达式进行任务调理触发)。


我们这里是简朴的任务测试,无需输入任何参数,只需要点击『生存』按钮即可。

第四步:查察日志
点击任务右侧操纵下 “查询日志” 按钮,可前往调理日志界面查察调理日志。
在调理日志界面中,可查察该任务的汗青调理纪录以及每一次调理的调理时间、调理效果、调理备注、执行时间、执行效果和执行备注。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查察实时执行日志。


可以看到调理效果和执行效果都是:乐成。我们点击调理备注查察:

点击操纵,内里有执行日志和终止任务两个按钮:

由于我们任务比力简朴,已经执行完成,我们来点击一下执行日志按钮看一下:

  1. 2020-12-28 15:39:35 [com.xxl.job.core.thread.JobThread#run]-[124]-[Thread-8] ----------- xxl-job job execute start ---------------------- Param:2020-12-28 15:39:35 [com.xxl.job.core.handler.impl.GlueJobHandler#execute]-[26]-[Thread-9] ----------- glue.version:1609141157000 -----------2020-12-28 15:39:35 [sun.reflect.NativeMethodAccessorImpl#invoke0]-[-2]-[Thread-9] XXL-JOB, Hello World.2020-12-28 15:39:352020-12-28 15:39:35 [com.xxl.job.core.thread.JobThread#run]-[164]-[Thread-8] ----------- xxl-job job execute end(finish) ---------------------- ReturnT:ReturnT [code=200, msg=null, content=null]2020-12-28 15:39:35 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[191]-[xxl-job, executor TriggerCallbackThread] ----------- xxl-job job callback finish.[Load Log Finish]
复制代码
我们可以看到这内里有job执行开始信息、参数、glue版本号、我们输入的Hello World.+当前时间、job执行结束信息、ReturnT:ReturnT返回执行效果以及job 回到完成信息。
通过我们上面的简朴的开辟任务可以看出GLUE的**原理是:每一个GLUE模式的代码,在“执行器”继承到调理请求时,都会通过Groovy类加载器加载出代码,并实例化成Java对象,同时注入此代码中声明的Spring服务(这里要确保代码中所引用的类或服务在“执行器项目中存在”),接着调用该对象的execute方法,执行具体的任务逻辑。**说白了,就是任务以源码方式维护在调理中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。
BEAN模式

在该模式下,任务的具体实现逻辑是以JobHandler的形式存在于“执行器项目”中
BEAN模式(类形式)

Bean模式(类形式)任务支持基于类的开辟方式,每个任务对应一个Java类。


  • 优点:不限制项目情况,兼容性好。即使是无框架项目,如main方法直接启动的项目也可以提供支持,可以参考示例项目 “xxl-job-executor-sample-frameless”;
  • 缺点:每个任务需要占用一个Java类,造成类的浪费;
    不支持自动扫描任务并注入到执行器容器,需要手动注入。
原理: 每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目标Spring容器中。任务类需要加“@JobHandler(value=”名称”)”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”任务逻辑在execute方法中开辟,因为“执行器”在吸收到调理中心的调理请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
第一步:执行器项目中,开辟Job类



  • 开辟一个继承自"com.xxl.job.core.handler.IJobHandler"的JobHandler类,实现其中任务方法。
  • 手动通过如下方式注入到执行器容器。
    XxlJobExecutor.registJobHandler(“demoJobHandler”, new DemoJobHandler());
第二步:调理中心,新建调理任务

运行模式选中 “BEAN模式”,JobHandler属性填写任务注解“@JobHandler”中界说的值;

点击生存:


接下来就可以对任务进行执行一次、查察日志、启动等操纵。
BEAN模式(方法形式)

Bean模式(方法形式)任务支持基于方法的开辟方式,每个任务对应一个方法。


  • 优点:每个任务只需要开辟一个方法,并添加”@XxlJob”注解即可,更加方便、快速。
    支持自动扫描任务并注入到执行器容器。
  • 缺点:要求Spring容器情况;
  基于方法开辟的任务,底层会生成JobHandler署理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务容器中。
第一步:执行器项目中,开辟Job方法

  1. 1、任务开辟:在Spring Bean实例中,开辟Job方法;2、注解设置:为Job方法添加注解 "@XxlJob(value="自界说jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调理中心新建任务的JobHandler属性的值。3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;4、任务效果:默认任务效果为 "乐成" 状态,不需要主动设置;如有诉求,好比设置任务效果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务效果;
复制代码
// 可参考Sample示例执行器中的 “com.xxl.job.executor.service.jobhandler.SampleXxlJob” ,如下:
@XxlJob(“demoJobHandler”)
public void demoJobHandler() throws Exception {
XxlJobHelper.log(“XXL-JOB, Hello World.”);
}
第二步:调理中心,新建调理任务

运行模式选中 “BEAN模式”,JobHandler属性填写任务注解“@XxlJob”中界说的值。可以参考下面“设置属性详细说明”对新建的任务进行参数设置。
设置属性详细说明

底子设置:


  • 执行器:任务的绑定的执行器,任务触发调理时将会自动发现注册乐成的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 “执行器管理” 进行设置;
  • 任务形貌:任务的形貌信息,便于任务管理;
  • 负责人:任务的负责人;
  • 报警邮件:任务调理失败时邮件通知的邮箱所在,支持设置多邮箱所在,设置多个邮箱所在时用逗号分隔;
触发设置:


  • 调理范例
    无:该范例不会主动触发调理;
    CRON:该范例将会通过CRON,触发任务调理;
    固定速度:该范例将会以固定速度,触发任务调理;按照固定的隔断时间,周期性触发;
    固定延迟:该范例将会以固定延迟,触发任务调理;按照固定的延迟时间,从上次调理结束后开始计算延迟时间,到达延迟时间后触发下次调理;
  • CRON:触发任务执行的Cron表达式;
  • 固定速度:固件速度的时间隔断,单元为秒;
  • 固定延迟:固件延迟的时间隔断,单元为秒;
任务设置:


  • 运行模式
    BEAN模式:任务以JobHandler方式维护在执行器端;需要团结 “JobHandler” 属性匹配执行器中任务;
    GLUE模式(Java):任务以源码方式维护在调理中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 “groovy” 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;
    GLUE模式(Shell):任务以源码方式维护在调理中心;该模式的任务实际上是一段 “shell” 脚本;
    GLUE模式(Python):任务以源码方式维护在调理中心;该模式的任务实际上是一段 “python” 脚本;
    GLUE模式(PHP):任务以源码方式维护在调理中心;该模式的任务实际上是一段 “php” 脚本;
    GLUE模式(NodeJS):任务以源码方式维护在调理中心;该模式的任务实际上是一段 “nodejs” 脚本;
    GLUE模式(PowerShell):任务以源码方式维护在调理中心;该模式的任务实际上是一段 “PowerShell” 脚本;
  • JobHandler:运行模式为 “BEAN模式” 时生效,对应执行器中新开辟的JobHandler类“@JobHandler”注解自界说的value值;
  • 执行参数:任务执行所需的参数;
高级设置:


  • 路由策略:当执行器集群摆设时,提供丰富的路由策略,包罗;
    FIRST(第一个):固定选择第一个机器;
    LAST(最后一个):固定选择最后一个机器;
    ROUND(轮询):;
    RANDOM(随机):随机选择在线的机器;
    CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务匀称散列在差别机器上。
    LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
    LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
    FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测乐成的机器选定为目标执行器并发起调理;
    BUSYOVER(繁忙转移):按照顺序依次进行空闲检测,第一个空闲检测乐成的机器选定为目标执行器并发起调理;
    SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动通报分片参数;可根据分片参数开辟分片任务;
  • 子任务:每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束而且执行乐成时,将会触发子任务ID所对应的任务的一次主动调理。
  • 调理逾期策略

    • 忽略:调理逾期后,忽略逾期的任务,从当前时间开始重新计算下次触发时间;
    • 立刻执行一次:调理逾期后,立刻执行一次,并从当前时间开始重新计算下次触发时间;

  • 阻塞处置惩罚策略:调理过于麋集执行器来不及处置惩罚时的处置惩罚策略;
    单机串行(默认):调理请求进入单机执行器后,调理请求进入FIFO队列并以串行方式运行;
    抛弃后续调理:调理请求进入单机执行器后,发现执行器存在运行的调理任务,本次请求将会被抛弃并标志为失败;
    覆盖之前调理:调理请求进入单机执行器后,发现执行器存在运行的调理任务,将会终止运行中的调理任务并清空队列,然后运行当地调理任务;
  • 任务超时时间:支持自界说任务超时时间,任务运行超时将会主动中断任务;
  • 失败重试次数;支持自界说任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;

来源:https://blog.csdn.net/weixin_44798288/article/details/111772876
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )