xxl-job 任务管理

xxl-job(https://github.com/xuxueli/xxl-job) 系统的具体设计,可以参考官方文档,非常详细,这里只说一下大概的流程。 

1. 应用端通过继承类或者注解的方式,来标示一个类或者一个方法是一个job。 
2. 在应用启动的时候,会做3个事情:
     1. 扫描上面第一步的类或者方法,放入内存。 
     2. 启动一个内嵌的基于netty的http服务端。
     3. 将内嵌的服务端地址注册到调度中心。 
3. 调度中心取获分布式锁(mysql 的for update,保证HA状态下的调度中心只有一个能执行),拿到锁之后扫描需要执行的job,计算下一次要执行的时间, 放入到一个ring,类似于一个时间轮,之后会有一个单独的线程从ring中拿到当前要执行的job进行触发执行,触发方式是通过一定的负载策略,调用上面第二步内嵌http服务器的地址。
4. 应用内的http服务端接收到请求,会放入到内存队列中,之后会有单独一个线程从队列中拿到要执行的job进行执行。 
 
我的注解版xxl-job: https://github.com/zhaoyb/xxl-job

 

posted @ 2020-08-04 22:42  秋夜  阅读(1027)  评论(0编辑  收藏  举报