
參考文章:
传统项目的形式任务可以通过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,也不会继续扫描啦。