XXL-JOB分片执行分布式任务

XXL-JOB相对于springtask来说优点之一就是分布式执行任务,可以在调度中心为执行器分发任务,实现分布式。

分片广播任务即当一个微服务形成集群的时候,任务会完整的下发给每一个执行器。而不像其他模式一样只会根据算法选择单一的任务。在任务高级配置路由策略中选择最后一项即可实现分片

使用前的准备:pom引入依赖,yaml添加配置,新增config配置,添加service组件

示例代码

/**
* 2、分片广播任务
*/
@XxlJob("shardingJobHandler")
public void shardingJobHandler() throws Exception {

// 分片参数
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();

XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

// 业务逻辑
  List<Entity> entityList = service.getTaskList(shardIndex, shardTotal);
  //todo 再根据场景让不同分片进行不同的任务处理


}

 

调度过期策略是指调度中心错过原定调度时间后,对过期任务的补偿策略

1.忽略:忽略过期任务,从当前时间开始从新计数。适用于对时间要求不严格,偶尔错过调度时间也无伤大雅的场景

2.立即执行一次:任务过期后立即执行并从新开始计数

 

阻塞处理策略:调度请求过于密集的时候,执行器无法及时处理所有任务

1.单机串行:任务固定以FIFO的队列进行,容易造成任务堆积影响性能——适用于需确保任务都执行并且对任务顺序要求不严格的情况

2.丢弃后续调度:新的任务进入时如果发现当前执行器仍在执行任务,那么新的任务直接丢弃,可能会造成数据丢失——适用于需要防止任务堆积并且对任务丢失有一定容忍的情况

3.覆盖之前调度:新的任务进入时如果发现当前执行器仍在执行任务,那么直接丢弃执行任务,也可能会造成数据丢失,而且频繁中止和启动会影响性能——适用于总是要确保最新任务优先执行并且对之前任务处理结果不敏感的情况

 

 ——————7.12————————

如何在分布式的情况下保证任务不会重复执行:

1.执行器会收到当前分片总数与分片序号,这里我们可以通过算法:任务id%分片总数=分片序号

2.配置调度过期策略为忽略,避免同一执行器多次执行相同任务;同时配置任务阻塞处理为丢弃后续调度。

3.除此以外保证幂等性

posted @ 2024-07-08 21:45  天启A  阅读(630)  评论(0)    收藏  举报