从0到1搭建分布式定时任务平台:XXL-Job 原理拆解+手写精简版
引言 上个月的月结对账又双叒出问题了。凌晨 2 点的对账任务跑了 40 分钟,账单数据多了一倍——排查发现,两个订单服务实例各跑了一遍对账。单机时代用 @Scheduled 的代码,在部署第二个实例的那天起就埋下了这颗雷:没有分布式锁、没有分片、没有失败重试、没有告警,任务挂了只能靠第二天报表对不上才发现。 我们要的能力其实很明确: 需求@Scheduled 的现状期望 多实例不重复执行❌ 每个实例都会跑集群下同一任务只跑一次 大数据量提速❌ 单线程慢分片并行:10 个实例各处理 1/10 数据 任务失败感知❌ 日志里默默报错自动重试 + 告警通知 动态调整执行时间❌ 改 cron 要重启控制台改完立即生效 执行记录可查❌ 无记录每次执行的耗时/结果/日志留痕 手动触发/停止❌ 不支持控制台一键执行、终止 这些需求拼在一起,就是一个"分布式定时任务平台"。业界答案是 XXL-Job——它优雅地解决了上面所有问题,而且实现思路并不神秘。这篇文章先拆解 XXL-Job 的核心架构(调度中心做什么、执行器做什么、双方怎么协作),然后手写一个精简版:Quartz 调度 + HTTP....