XXL-JOB 由调度中心,执行器, 任务组成。
执行器中存放若干任务,具体执行哪些任务由执行器决定。
调度中心实现对执行器的调度。
怎么配置环境? 我试了好久,终于摸清了套路。首先,这个框架是给微服务设计的,也就意味着他和eurake差不多,都需要一个服务中心的玩意对我们的诸多服务提供注册监听的服务。
我从github下了 源码, 果然,源码里有个叫admin的项目, 这个项目就是“调度中心” , 负责统一管理任务调度。 我们要做的就是 启动运行这个xxl-job-admin服务, 然后把我们自己的服务中的任务注册到xxl-job-admin中。 xxl-job-admin服务为我们提供了一个web端界面,我们可以使用界面定义配置我们的任务。
这个框架用起来非常简单,官网的文档写的非常直白, 顺序看下来就能懂个大半。 唯一的缺点是xxl-job用的是mysql数据库。对于pgsql数据库不适用,要改,光从数据库还不行,他代码里的model也不能用。因为mysql的语句 在单词前后加了~ , 这个符号pgsql没有。所以项目跑不起来。自己用pgsql搭到一半就放弃了。
我来说说自己的搭建过程的心得。
我们的服务注册执行器的时候,xxl.job.executor.appname是在web界面配置的执行器名称。 框架按照这个名称对我们的服务进行分组。 假设我们有两个服务A 和B ,用的是同一个xxl.job.executor.appname,就意味着服务A和B都注册在了同一个执行器。 如果两个服务都在本机的话,要保证端口不同。
触发配置:
- 调度类型:
无:该类型不会主动触发调度;
CRON:该类型将会通过CRON,触发任务调度;
固定速度:该类型将会以固定速度,触发任务调度;按照固定的间隔时间,周期性触发;
固定延迟:该类型将会以固定延迟,触发任务调度;按照固定的延迟时间,从上次调度结束后开始计算延迟时间,到达延迟时间后触发下次调度;
固定速度: 是指每隔固定时间调度一次任务。假如现在是2:00 ,每隔5分钟执行一次任务。 一次任务的执行时间是2个小时。 那么固定速度的执行时间是:2:05 2:10 2:15 。。。。 不论任务有没有执行完成,每隔5分钟都会进行一次任务调度。
固定延迟:执行时间会是-》2:05 4:10 6:15 , 是先执行一次任务, 等这个任务完成后,延迟5分钟再次进行任务调度。
调度类型是无就以为着这个任务要手动调度。
高级配置:
- 路由策略:当执行器集群部署时,提供丰富的路由策略,包括;
FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;
当一个执行器中注册了多台机器时(127.0.0.1:9999 , 127.0.0.1:9998 , 127.0.0.1:9997)
轮询策略:任务轮番分配给三台机器。 第一次调度时让9999的机器去执行, 第二次调度时让9998的机器去执行, 第三次调度时让9997的机器去执行, 第四次调度时让9999的机器去执行。
随机: 注意是随机选择 在线 的机器。
其他的官方文档都说的很详细了。 这个东西真的太好用了 。
官方文档地址! 推荐推荐!