xxl-job简介
分布式任务调度项目xxl-job的官网:分布式任务调度平台XXL-JOB
大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
常见使用场景如下:
- 同一服务多个实例的任务存在互斥时,需要统一协调、调度,任务分布式执行
- 定时任务的执行需要支持高可用、监控运维、故障告警
- 需要统一管理和追踪各个服务节点定时任务的运行情况,以及任务属性信息,例如任务所属服务、所属责任人
主要特性:
1.3 特性
1、执行失败可以查看日志
2、支持邮件报警
3、路由策略支持轮询等策略,可以减轻执行服务器的压力
4、轮询时间等参数修改后立即生效
5、执行器有问题或新增,快速识别
6、调度中心高可用,调度中心可以集群部署(集群部署的机器时钟必须同步),如果调度中心没有做负载在执行器的配置中需要配多个地址,如果调度中心配置负载则执行器配置负载地址即可
7、执行器高可用(执行器可以集群部署)
xxl-job架构图
核心模块 (1)调度中心 (2) 执行器,类似schedule运行所在的机器。
调度中心负责将任务,分发到执行器执行。
- 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。
- 执行模块(执行器):负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;接收“调度中心”的执行请求、终止请求和日志请求等。
集群化部署
部署多台调度器和执行器。或者在配置文件中写多个调度中心地址。
日常开发中使用xxl-job
-
开发计划任务
通常我们使用spring的schedule处理计划任务,替换为xxl-job操作步骤
LidarFileSizeSyncService.java 为例, 代码中有spring的schedule定时任务
@Scheduled(cron = "0 0/1 * * * ?")
public void lidarFileSizeSync() {
.....
}
将 @Scheduled(cron = "0 0/1 * * * ?") 调用改为
@XxlJob("lidarFileSizeSync") 任务名称自定,但是相同执行器appname下,不能重复。
2 调度中心新增开发的计划任务
登录调度中心,测试环境调度中心为
http://localhost:8081/xxl-job-admin
进入登录界面,帐号默认 admin ,密码默认 123456
点”新增“按钮
在新增界面增加,任务信息
其中关键项为 任务执行时间
任务名JobHandler必须与 XxlJob名一致。 任务描述,描述任务的功能说明,负责人,填写开发负责功能的人员名称。
如果,添加周期性执行任务,在“调度类型”项,选择 固定速度,周期单位为秒。
3. 管理任务状态
此时任务默认是STOP状态 , 此时可以先在操作按钮,点”执行一次“,查询日志等操作,然后再把任务设置为启动状态。
执行完成后,可以查看执行日志,点查看可以看到任务执行情况,是哪个调度器执行的等信息。
如果使用 任务中也可以使用 XxlJobHelper.log("======lidarFileSizeSync.");
在执行器中的 xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler ,也可以看到执行的日志。
示例代码
基于springboot执行器示例
链接:https://pan.baidu.com/s/1-0H4C6_2wJLtAmxTbeyd6w?pwd=lb9l
提取码:lb9l
执行器代码配置说明
### 调度中心服务器地址 "http://address" ,如果地址为空,不注册为执行器。 有多个地址使用逗号分开 "http://address01,http://address02"
xxl.job.admin.addresses=http://172.30.1.17:8081/xxl-job-admin
### 执行器名称,根据项目定义名称[小屏 executor-auto,大屏 executor-dgtn]
xxl.job.executor.appname=xxl-job-executor-sample
### 任务执行器端口,如果端口设置为0,执行器会自动使用一个空闲端口
xxl.job.executor.port=0
### 执行器日志目录
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 日志保留时间
xxl.job.executor.logretentiondays=7