1.执行器 - Executor
主要作为任务执行的执行实体,一般由例如Quartz、Spring Task、Elastic-Job、XXL-Job等分布式任务调度组件会提供出现的。
2.触发器-Trigger
触发器式非常难以控制的,如果再单节点的情景下面,倒是无需考虑,但是如果一旦存在着分布式节点部署控制的时候,就会出现此问题,如何互斥不同节点之间相同触发器的时候的任务的执行和触发条件呢。
3.执行任务-Task
我们自定义的任务信息,一般为业务信息Q执行操作服务
4.调度中心-Scheduler(分布式控制/单机)(控制台)
** 执行器的管理,需要进行关联调度中心,它决定是否由哪个触发器触发以及哪个执行器执行的操作,它决定和管理了触发器和执行器,并且关联了数据库(触发器的数据)+(执行器的数据)+(多个任务执行的运作状态)。 **
**执行器路由计算,他负责计算路由到哪一个执行器的服务上去执行。**
** 路由基于节点通知机制/注册器的发现/心跳(如何和调度中心进行通讯的方式)**
1.执行器组成
主要数据项(appName:应用名称),(name)名称,(sort) 排序序号,注册方式(手动注册、自动注册),机器地址(执行器地址列表,多个执行器用逗号分隔)
2.定义执行器
2.1 @JobHandler注解
2.2 继承的IJobHandler
主要去实现execute方法(String param)字符串参数
其中XxlJobLogger.log()打印日志log可以同步到相关的log表中。
xxl-job介绍
xxl-job是一个分布式任务调度系统,基于quartz实现调度器。
1、quartz是基于数据库for update实现锁,来保证同一个任务同一时间只会执行一次。
2、最新版本的xxl-job已经摒弃了quartz.
xxl-job核心模块
1、调度中心,也就是任务的管理系统
2、执行器,任务真正的执行服务,一般是分布式的服务。
任务执行过程
1、调度中心
1.1 点击执行的时候,入口JobInfoController.triggerJob方法:
进入JobTriggerPoolHelper.trigger方法,调用了JobTriggerPoolHelper.addTrigger方法,那么看一下addTrigger方法:
进入执行任务:XxlJobTrigger.trigger
进入processTrigger方法,组装任务参数,选择路由和阻塞策略