XXL-JOB调度中心、执行器、Job之间的关系
一、调度中心
职责:
管理所有 Job 的配置(CRON 表达式、路由策略等)
触发任务调度(基于 Quartz)
监控执行状态和日志
管理执行器集群
二、执行器
职责:
注册到调度中心(心跳机制)
接收调度指令
加载并执行具体 Job
返回执行结果和日志
三、Job
职责:
实现
XxlJob
接口或使用注解执行业务代码(如对账、报表生成)
返回执行结果
三者协作流程:
1、任务注册(启动时)
执行器在启动时会向调度中心发送注册请求,包含执行器的标识信息(如名称、IP 地址、端口等)。这个过程确保调度中心能够识别和管理所有可用的执行器。
2、任务触发(调度时)
调度中心根据设定的调度策略,使用 RESTful API 将任务信息分发给指定的执行器。请求中包含任务 ID、执行参数和调度时间等信息。
3、任务执行
执行器根据接收到的任务信息,调用用户定义的任务处理JobHandler(如 Java 方法、Python 脚本等),开始执行任务。
4、结果反馈
执行器在完成任务执行后,通过 RESTful API 将执行结果(如成功、失败、执行时间、日志等)回调给调度中心。通常是通过发送一个 POST 请求来实现的。
当Job已经注册到执行器中,执行器也会将Job的信息保存到一个JobHandler 注册表(ConcurrentHashMap),在每次执行器向调度中心发送心跳的时候,一起发送到调度中心,心跳时发送的数据示例如下:
{"appname": "wallet-service","address": "192.168.1.100:9999","jobHandlers": [ // 关键信息"walletSumDailyTransactionJob","walletCleanupJob","userSyncJob"]
}
这样调度中心就知道了,这个执行器能不能执行用户在页面上配置的任务。
注:当代码中有某个Job时,该Job注册到执行器中,执行器注册到调度中心后。只要调度中心配置了某个任务(配置执行器,选择了JobHandler、cron表达式等),调度中心就可以直接调用具体的执行器执行任务,而不需要执行器重启