Elastic Job 是一个适合高吞吐量的分布式任务调度解决方案。
ElasticJob 通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。
环境准备
-
Zooker 3.6 + (必须):用于分布式协调
zookeeper官网地址: https://zookeeper.apache.org/
zookeeper下载地址:https://archive.apache.org/dist/zookeeper/
# 下载并解压
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -xvf apache-zookeeper-3.7.1-bin.tar.gz
# 配置基础参数
cd conf
cp zoo_sample.cfg zoo.cfg
# 启动服务
./bin/zkServer.sh start
- JDK 11 + (推荐17)
- Maven3.8 +
项目集成
在此之前,需要运行zookeeper
以SpringBoot为例,项目集成步骤如下。
-
xml文件,添加Maven项目依赖。
<!-- Zookeeper客户端--> <dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.1.0</version> </dependency> <!-- ElasticJob核心依赖--> <dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-boot-starter</artifactId><version>3.0.4</version> </dependency>
-
改yaml。配置zooker连接。
elasticjob:zookeeper:server-lists: 127.0.0.1:2181 # Zookeeper地址namespace: elasticjob-demo # 命名空间tracing:type: RDB # 执行日志存储方式
-
开发第一个分片任务。
实现MyJob,编写任务逻辑。
@Component public class MyJob implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {// 获取单枪分片信息int shardIndex = shardingContext.getShardingItem();int totalShards = shardingContext.getShardingTotalCount();System.out.println("[分片信息]:" + shardIndex + "/" + totalShards + " [时间]:" + LocalDateTime.now());} }
在配置人中定义调度规则:
@Configuration public class JobConfig {@Beanpublic JobConfiguration myJobConfig() {return JobConfiguration.newBuilder("myShardingJob", 3) // 任务名称,分片数量.cron("0/10 * * * * ?") // cron表达式,10秒执行一次.shardingItemParameters("0=北京,1=上海,2=广州") // 分片参数(可选).failover(true) // 失败自动恢复,默认为false.monitorExecution(true) // 监控任务执行,默认为true.build();} }
运行后,控制台输出示例:
分片1/3:处理数据ID%3=0的数据 分片2/3:处理数据ID%3=1的数据 分片3/3:处理数据ID%3=2的数据