xxl支持多种路由策略。路由策略针对同一个job在不同group运行的策略,当同时启动多个同名的执行器例子时,这个执行器就有多个,如下:
这样这个xxl-job-executor-sample下就有两个进程了,配置这个group下的的job的路由策略:
具体策略详见com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
FIRST(I18nUtil.getString("jobconf_route_first"), new ExecutorRouteFirst()),
LAST(I18nUtil.getString("jobconf_route_last"), new ExecutorRouteLast()),
ROUND(I18nUtil.getString("jobconf_route_round"), new ExecutorRouteRound()),
RANDOM(I18nUtil.getString("jobconf_route_random"), new ExecutorRouteRandom()),
CONSISTENT_HASH(I18nUtil.getString("jobconf_route_consistenthash"), new ExecutorRouteConsistentHash()),
LEAST_FREQUENTLY_USED(I18nUtil.getString("jobconf_route_lfu"), new ExecutorRouteLFU()),
LEAST_RECENTLY_USED(I18nUtil.getString("jobconf_route_lru"), new ExecutorRouteLRU()),
FAILOVER(I18nUtil.getString("jobconf_route_failover"), new ExecutorRouteFailover()),
BUSYOVER(I18nUtil.getString("jobconf_route_busyover"), new ExecutorRouteBusyover()),
SHARDING_BROADCAST(I18nUtil.getString("jobconf_route_shard"), null);
包括ExecutorRouteFirst(第一个),ExecutorRouteLast(最后一个),ExecutorRouteRound(轮询),ExecutorRouteRandom(随机),
ExecutorRouteConsistentHash(一致性hsah),ExecutorRouteLFU(最不经常使用),ExecutorRouteLRU(最近最久未使用)
ExecutorRouteFailover(故障转移),ExecutorRouteBusyover(忙碌转移)和jobconf_route_shard(分片广播)
具体实现逻辑可以到这些类里阅读。
分片广播这个有些不同,每个执行者进程里都会执行该job。
xxl支持多种阻塞处理策略,
//串行:相同任务先进先出执行
SERIAL_EXECUTION("Serial execution"),
//丢弃后续调度:相同任务先进先出执行,执行已经执行的,新的任务不执行
DISCARD_LATER("Discard Later"),
//覆盖之前调度:相同任务先进先出执行,已执行的立即停止,执行新的任务
COVER_EARLY("Cover Early");