XXL-JOB
XXL-JOB
概述
XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
设计思想
设计思想是将调度行为抽象形成调度中心公共平台,平台本身不承担业务逻辑,而是负责发起调度请求后,由执行器接收调度请求并执行任务,这里的任务抽象为分散的 JobHandler,交由执行器统一管理。通过这种方式即可实现调度与任务相互解藕,从而提高系统整体的稳定性和拓展性。
系统组成
- 调度模块(调度中心):
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。 - 执行模块(执行器):
负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
接收“调度中心”的执行请求、终止请求和日志请求等。
架构
特性
分布式任务调度平台
分布式下,每个服务都可以搭建为集群,这样的好处是可以将任务切片分给每一个服务从而实现并行执行,提高任务调度的处理效率。
在集群环境下,使用单体系统的任务调度会出现很多问题:
- 无法做到对任务的控制,避免任务的重复执行
- 单体应用宕机会存在任务丢失
- 无法做到弹性扩容即增加服务实例
- 如何做到对任务调度的执行情况统一监测
部署
拉取镜像
1 | docker pull xuxueli/xxl-job-admin:2.3.1 |
创建数据卷目录
1 | mkdir -p -m 777 /mydata/xxl-job/data/applogs |
SQL文件导入到指定数据库
SQL文件:https://gitee.com/xuxueli0323/xxl-job/blob/master/doc/db/tables_xxl_job.sql
运行容器
1 | docker run -p 8080:8080 --restart=always \ |
访问任务调度平台
SpringBoot集成XXL-JOB
XXL-JOB由调度中心和执行器组成,上面部署了调度中心,下面介绍如何配置部署执行器。
导入依赖
1 | <dependency> |
配置application.yml文件
1 | xxl: |
编辑配置类
1 |
|
调度中心新增执行器
执行器的配置属性:
- AppName: 每个执行器集群的唯一标示 AppName,执行器会周期性以 AppName 为对象进行自动注册。可通过该配置自动发现注册成功的执行器,供任务调度时使用。
- 名称:执行器的名称(可以使用中文)
- 注册方式:调度中心获取执行器地址的方式。
- 自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址。
- 手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用。
- 机器地址:”注册方式”为”手动录入”时有效,支持人工维护执行器的地址信息。
配置执行器自定义任务:
配置自定义任务有很多种模式,包括Bean模式(基于方法)、Bean模式(基于类)、GLUE模式等。这里介绍通过Bean模式(基于方法)。
Bean模式(基于方法)就是每个任务对应一个方法,通过添加
@XxLJob(value="自定义JobHandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")
注解完成定义。
1 |
|
调度中心新增任务
任务配置属性详细说明
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.