1.xxl-job简述
下面先放一张我从官网找的的最新的架构图,是v2.1.0版本的,不是代码最新的架构图但是几乎大差不差,右下角红框标出来的自研 RPC(xxl-rpc),在 V2.2.0 里面已经替换成了restful风格的 http 请求方式。
把上面的图精简了一下,xxl-job 的调度器和业务执行是独立的。调度器决定任务的调度,并且通过 http 的方式调用执行器接口执行任务。
架构设计思想:
1、将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中负责发起调度请求。
2、将任务抽象成分散的JobHandler,交由“执行器”(可以理解为就是我们的服务实例)
统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑:
因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
xx1-iob里面具体内容我这里不再详述,请大家移步至xxl-job的开源社区里面有详细介。
2、安装与使用
2.1、安装
技术派围绕的目前xxl-jobv.2.4.0版本进行整合。
先去官网https://github.com/xuxueli/xxl-job/tree/2.4.0下载代码。
拉下代码后再idea中打开有如下目录:
1、doc:文档资料,包括"调度数据库"建表脚本
2、xxl-job-core:公共 Jar 依赖
3、xxl-job-admin:调度中心,项目源码,spring boot 项目,可以直接启动
4、xxl-job-executor-samples:执行器,sample 示例项目,其中的 spring boot 工程,可以直接启动。可以在该项目上进行开发,也可以将现有项目改造生成执行器项目。
在拉取代码之后需要以下几步才能正常启动:
第一步:去doc文件夹中拿取SQL脚本放在自己的M有SQL数据库中执行SQL
运行完SQL脚本之后,数据库如下表:
第二步:在admin模块中修改application.properties配置文件(端口号可以修改、数据库配置需要修改)
2.2、启动xxl-job
启动成功之后,在浏览器直接访问web页面URL:http://127.0.0.0.1:8080/xxl-job-admin。
登陆进去有如下页面:
走到这一步,说明我们的xxl-job准备工作已经准备好啦,下一步就与SpringBoot进行整合。
3、SpringBoot整合xxl-job实现定时任务
3.1、引入xxl-job依赖
<!--xxl-job实现定时任务-->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
3.2、yml配置文件中方配置xxl-job配置
xxl:
job:
admin:
# 调度中心服务部署的地址
addresses: http://localhost:8022/xxl-job-admin
# 执行器通讯TOKEN,要和调度中心服务部署配置的accessToken一致,要不然无法连接注册
accessToken: default_token777
executor:
# 执行器AppName
appname: job-demo
# 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
address:
ip:
#执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
port: 8889
# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
logpath:
# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
logretentiondays: 30
Xxl-job分布式任务调度中心
xxl:
job:
admin:
# 调度中心服务部署的地址,如果调度中心集群部署存在多个地址,则用逗号分隔开
# 注意这里的端口号
addresses: http://127.0.0.1:8089/xxl-job-admin
# 执行器通讯TOKEN,要和调度中心服务部署配置的accessToken一致,要不然无法连接注册 ,系统默认default_token 非时空
accessToken: default_token
executor:
# 执行器AppName(应用名称)
appName: pai-coding
# 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
address: ""
执行器ip 【选填】 默认为空表示自动获取ip
ip: ""
#执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
port: 9998
# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
logpath:
# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
logretentiondays: 7
在配置文件中详细介绍了其各个功能,这里不做详解啦。
端口号一定要和xxl-job admin模块中配置的端口号一致。