主题
XXL-JOB 学习路线
适用版本:XXL-JOB 2.3.x / 2.4.0。按 01→07 读:先建立 Admin + Executor + MySQL 的坐标系,再看一次执行怎么流转,最后看调优、故障和选型。
八篇顺序
| 篇 | 一句话 |
|---|---|
| 01-架构总览与核心概念 | Admin 管调度、Executor 管执行、MySQL 存 8 张表;触发靠 JobScheduleHelper 扫表,不是 Quartz Scheduler。 |
| 02-任务生命周期与状态机 | 没有 8 态状态机,只有 trigger_status、trigger_code、handle_code;Executor 只在结束时回调一次。 |
| 03-调度核心机制 | 5 秒预读 + 60 槽秒级时间环 + xxl_job_lock 行锁;分片广播的 shardTotal 等于注册实例数。 |
| 04-通信协议与路由策略 | 双向 HTTP:/run 送达、/api/callback 报结果、/beat 探活、/idleBeat 探空闲;回调重试不重跑 Handler。 |
| 05-心跳与故障剔除 | Executor 30 秒心跳,Admin 30 秒扫描、90 秒判死;实际消失窗口是 90–120 秒。 |
| 06-设计取舍与对比 | 极简主义的五组取舍,以及与 ElasticJob、SchedulerX 的适用边界。 |
| 07-生产踩坑与运维兜底 | 积压、回调丢失、重复执行、分片放大、日志膨胀五类事故的现象、证据、根因和处置。 |
版本与部署前置
- JDK 8+、MySQL 5.7/8.0、Maven 3.6+。
- 导入
doc/db/tables_xxl_job.sql,默认库名xxl_job,应有 8 张表:xxl_job_info、xxl_job_log、xxl_job_log_report、xxl_job_logglue、xxl_job_group、xxl_job_registry、xxl_job_user、xxl_job_lock。 - Admin 默认端口 8080、上下文
/xxl-job-admin;Executor 默认端口 9999;两端xxl.job.accessToken必须一致。 - 不需要 ZooKeeper,也不需要 Quartz 集群;但需要 MySQL 高可用,多台 Admin 需要 NTP 同步。
- 默认日志表没有分区,清理靠分批
DELETE,保留天数由xxl.job.logretentiondays控制。
自检清单
- [ ] 能说清 Admin、Executor、MySQL 各自负责什么,以及一次
/run+/callback的完整链路。 - [ ] 能解释为什么调度不是 Quartz Scheduler 触发,
xxl_job_lock为什么没有 30 秒租约。 - [ ] 能列出默认 schema 的 8 张表,并说出
xxl_job_group与xxl_job_registry的区别。 - [ ] 能本地起 Admin 和一个 Executor,创建任务、手动触发,并在
xxl_job_log里读出调度和执行结果。 - [ ] 能解释
trigger_code与handle_code的组合,以及handle_time为什么不是开始时间。 - [ ] 能解释分片广播的
shardTotal为什么不能独立设成 60。 - [ ] 能停掉一个 Executor,用 SQL 观察它从注册表和
address_list消失的时间窗口。 - [ ] 知道回调丢失时先核对业务结果,而不是直接重跑;知道锁等待不能用
UPDATE xxl_job_lock解决。
适用 XXL-JOB 2.3.x / 2.4.0 | 初稿 2026-10
生产检查清单
上线前、运行中、故障时逐条核对:99-生产检查清单。