以前公司平台中集成了定时任务功能,但平台内部实现比较简单,使用方式有些受限,比如说无法跟踪定时任务执行状态,无法自动解决集群状态下的任务争抢问题,因此考虑升级一下任务实现方式,搜集一番后,Quartz和Xxl-Job都能满足现在的需求;
通过上面ExecutorRegistryThread # start方法核心代码,可以看到,注册是通过adminBiz.registry代码实现的,调用链路总结如下:最终还是通过 HTTP 协议的 POST 请求,注册数据格式如下:看到这里,我们回到文章开头问题部分。
java.util.Timer是 JDK 1.3 开始就已经支持的一种定时任务的实现方式。ElasticJob 由于在架构设计上是基于 Zookeeper ,而 XXL-JOB 是基于数据库,性能方面的话,ElasticJob 略胜一筹。