【Java】Elastic Job从入门到入门
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
# 配置基础参数 # application.properties zookeeper.address=127.0.0.1:2181 zookeeper.sessionTimeout=5000
cd conf
cp zoo_sample.cfg zoo.cfg
# 启动服务 ,windows 在直接双击zKserver.cmd
./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 { @Override public void execute(ShardingContext shardingContext) { // 获取单枪分片信息 int shardIndex = shardingContext.getShardingItem(); int totalShards = shardingContext.getShardingTotalCount(); System.out.println("[分片信息]:" + shardIndex + "/" + totalShards + " [时间]:" + LocalDateTime.now()); } }
在配置人中定义调度规则:
@Configuration public class JobConfig { @Bean public 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的数据
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。