參考文章:
传统项目的形式任务可以通过Quartz
或者CRON
的方式触发,但是如果是集群项目,如果采用传统的方式,就存在如下问题:
用户使用的时候,完全可以将自身作为XXL-Job的任务执行器注册到Admin中
扫描流程
for update
做一个排它锁,避免HA部署时候,同一刻任务被调度多次trigger_next_time
在5秒内的任务,然后根据不同类型进行处理
(~,-5)
的任务,直接抛弃[-5,0]
,更新下一次触发时间,然后判定该时间是否在本周期内,如果是那么放入时间环[1-5]
,放入时间环调度流程和时间环
Map<Integer, List<Integer>> ringData
,其中Key是触发时间秒戳%60
的余数,value是当前秒的任务列表因为任务是放在内存中的,所以加入某个调度器宕机,那么这5秒的任务就丢失了?
ringData
是否有数据存在,如果有,那么会暂定8秒,等待任务被调度,所以不要利用kill -9 Pid
来关闭进程分片广播模式是指,某个任务,会被分发到所有的执行器中,每个执行器可以获取到total
和curIndex
,然后在业务逻辑中根据curIndex
自行分片。比如1W条数据,可以通过curIndex
分成total
份,然后当前的执行器处理curIndex
份的数据。
XXL的Bean Method的异常如何处理?
调度器集群部署如何防止任务重复执行?
for update
排它锁,任务处理后,更新下次触发时间,然后每次扫描的是下次触发时间在当前时间加5秒前的任务。关闭调度器是否会导致任务被丢弃
desotry
方法中判定了ringData
是否有数据,如果有,继续等待8秒再进行关机。同时关闭状态设置为了true,也不会继续扫描啦。