XXL-JOB 是什么
XXL-JOB 是面向 Java 应用的分布式任务调度平台,架构上分两块:调度中心(独立部署的控制台,负责任务配置、触发与日志查看)与执行器(业务应用引入 xxl-job-core 后内嵌注册上报)。它支持 cron 触发、固定速率、分片广播、失败重试与告警,还能用 GLUE 模式在线编辑 Shell、Python 等执行逻辑,改完立即生效。适合业务系统内部定时任务统一管理,尤其是需要与 Java 应用同一进程读写业务数据的场景。
基本信息
| 架构组成 | 调度中心(控制台)加执行器(业务应用内嵌) |
|---|---|
| 注册方式 | 执行器启动后向调度中心注册,心跳维持在线 |
| 触发方式 | cron、固定速率、手动触发、父子任务 |
| 路由策略 | 轮询、随机、一致性哈希、分片广播、故障转移 |
| GLUE 模式 | 在线编辑 Shell、Python 等执行逻辑,保存即生效 |
典型使用场景
- 业务系统内的定时任务统一管理:日终对账、订单超时关闭、报表生成
- 大批数据并行处理:分片广播把数据按分片键拆给多台执行器
- Java 应用与数据库同进程读写:避免跨系统取数的网络与权限开销
- 临时脚本类任务:用 GLUE 在线改逻辑,不用重新发布应用
- 故障转移:执行器节点宕机时把任务调度到在线节点
执行器配置
执行器配置
xxl.job.admin.addresses=http://xxl-job-admin:8080/xxl-job-admin
xxl.job.executor.appname=order-executor
xxl.job.executor.port=9999
xxl.job.accessToken=*** # 与调度中心保持一致,否则注册失败
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30
# 要点一:appname 要与调度中心创建的执行器名称一致
# 要点二:logpath 建议挂载持久卷,容器重启后日志不丢
# 要点三:日志保留天数按排障周期设置,默认过短会丢历史路由策略对照
| 策略 | 行为 | 适用场景 | 注意点 |
|---|---|---|---|
| 轮询 | 依次选在线执行器 | 任务可重复执行且无状态 | 需保证任务幂等 |
| 随机 | 随机选一台 | 负载分散 | 仍要求无状态 |
| 一致性哈希 | 按参数固定到某台 | 需要按业务键顺序处理 | 节点变更会重新分配 |
| 分片广播 | 所有执行器都执行,各拿分片序号 | 大批量并行处理 | 代码要按分片参数过滤数据 |
| 故障转移 | 失败后切到其他节点 | 对成功率要求高 | 可能产生重复执行 |
分片广播模式下每个执行器拿到自己的分片序号与总分片数,可把大批数据拆给多台机器并行处理,处理时务必按分片条件过滤,否则每台都处理全量。
执行器与调度中心的 accessToken 不一致时注册失败,现象不明显(控制台看不到执行器),排查时先核对这一项。
任务日志默认写本地磁盘,容器化部署时不挂持久卷就会随重启丢失,排障时只能靠业务表反推执行情况。