xxx-job 分布式任务调度框架 使用案例

本文档介绍了如何在集群部署的在线打车项目中利用xxx-job进行统一的定时任务管理。首先,下载并启动xxl-job管理平台,创建数据库并执行SQL脚本。接着,配置执行器,包括AppName、机器地址和端口。然后,通过后台管理页面设置定时任务,并在SampleXxlJob中设置断点进行调试。这为项目提供了方便的定时任务调度解决方案。
最近在做的一个在线打车项目,由于最终部署的环境采用集群部署,所以定时任务需要统一管理,项目中引用xxx-job的技术栈,此处做一个备份

一、下载 xxx-job 并启动

https://gitee.com/xuxueli0323/xxl-job

xxl-job 管理平台的项目
在这里插入图片描述
本地创建数据库,并执行doc目录下的sql文件,将服务运行起来

浏览器访问
http://127.0.0.1:8080/xxl-job-admin

在这里插入图片描述
admin / 123456

在这里插入图片描述
执行器可以认为是一个项目,
AppName与sample项目配置文件 xxl.job.executor.appname 一一对应,
选择手动录入,机器地址为本机,端口为sample项目配置文件 xxl.job.executor.port
在这里插入图片描述

二、运行sample项目

在这里插入图片描述
后台管理页面 执行定时器
在这里插入图片描述
在这里插入图片描述
点击保存,默认采用执行器的配置

找到 SampleXxlJob 增加一个断点
在这里插入图片描述

定时任务的调度是分布式系统中非常常见的需求,XXL-JOB 是一个优秀的分布式任务调度平台,它通过调度中心(Admin)和执行器(Executor)的配合,实现了任务的定时调度、动态管理、高可用等特性。 --- ### ✅ 一、定时任务调度的核心流程(以 XXL-JOB 为例) #### 1. **任务信息存储在数据库中** XXL-JOB 使用数据库表 `xxl_job_info` 来存储任务的调度信息,包括: - 任务描述 - 执行器名称(AppName) - 调度时间(cron 表达式) - 任务状态(启用/停用) - 任务处理器方法(`@XxlJob("xxx")` 注解的方法名) #### 示例字段: | 字段名 | 说明 | |--------|------| | `job_desc` | 任务描述 | | `job_cron` | 调度时间表达式 | | `job_status` | 任务状态(0-启动,1-停止) | | `executor_handler` | 任务处理器名称 | | `executor_param` | 任务参数(可选) | #### 2. **调度中心基于 Quartz 实现定时调度** 调度中心使用 Quartz 框架实现定时任务的调度。Quartz 支持动态添加、删除、修改任务,非常适合用于任务调度平台。 调度中心在初始化时,会从数据库中加载所有启用的任务,并为每个任务创建一个 Quartz Job。 ```java // 示例:动态添加 Quartz 任务 public void addJob(XxlJobInfo jobInfo) { JobKey jobKey = new JobKey(jobInfo.getId() + "", jobInfo.getExecutorHandler()); TriggerKey triggerKey = new TriggerKey(jobInfo.getId() + "", jobInfo.getExecutorHandler()); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(jobInfo.getJobCron()); CronTrigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) .withSchedule(scheduleBuilder) .build(); scheduler.scheduleJob(createJobDetail(jobInfo), cronTrigger); } ``` #### 3. **任务触发时发送 HTTP 请求到执行器** 当 Quartz 任务被触发时,调度中心会通过 HTTP 请求将任务信息发送到执行器的 `/xxl-job-executor/api/run` 接口。 ```java // 调度中心发送请求的核心逻辑 String url = "http://执行器IP:端口/xxl-job-executor/api/run"; XxlJobTriggerParam triggerParam = new XxlJobTriggerParam(); triggerParam.setExecutorHandler("demoJobHandler"); triggerParam.setExecutorParams("param1=value1"); String response = HttpUtil.post(url, JSON.toJSONString(triggerParam)); ``` #### 4. **执行器接收请求并执行任务** 执行器提供了一个 HTTP 接口用于接收任务请求,并通过反射调用本地的任务方法。 ```java @RestController @RequestMapping("/xxl-job-executor/api") public class JobApiController { @PostMapping("/run") public ReturnT<String> run(@RequestBody XxlJobTriggerParam triggerParam) { return XxlJobExecutor.execute(triggerParam.getExecutorHandler(), triggerParam.getExecutorParams()); } } ``` 执行器内部通过 `@XxlJob` 注解注册任务处理器: ```java @Component public class DemoJobHandler { @XxlJob("demoJobHandler") public ReturnT<String> demoJobHandler(String param) { System.out.println("执行任务,参数:" + param); return ReturnT.SUCCESS; } } ``` #### 5. **任务状态与日志管理** 调度中心会记录每次任务执行的日志,并提供 Web 界面查看执行状态、失败重试、调度日志等信息。 --- ### ✅ 二、定时任务调度的关键组件 | 组件 | 作用 | |------|------| | `XxlJobCompleteService` | 调度中心任务调度核心服务 | | `XxlJobInfoMapper` | 任务信息数据库操作 | | `JobApiController` | 执行器接收任务请求 | | `XxlJobExecutor` | 执行器执行任务的核心类 | | `XxlJobHandler` | 任务处理器接口 | | `@XxlJob` | 注解定义任务方法 | --- ### ✅ 三、定时任务调度的优势 | 特性 | 说明 | |------|------| | 动态调度 | 支持在线添加、修改、删除任务 | | 高可用 | 支持多个执行器节点 | | 失败重试 | 支持失败后自动重试 | | 日志追踪 | 支持查看任务执行日志 | | 分片机制 | 支持大数据任务并行处理 | | 多种调度策略 | 支持故障转移、轮询、一致性哈希等 | --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁漂打工仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值