文章目录
- 一、集成步骤
- 1、添加 ElasticJob 的依赖
- 2、配置 ElasticJob
- 3、定义Job
- 二、ElasticJob-UI
- 三、Elastic-Job分片理解
- 四、原理
一、集成步骤
1、添加 ElasticJob 的依赖
引入相关依赖到pom.xml
<!-- Elastic-Job -->
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
2、配置 ElasticJob
在application.properties添加ElasticJob 的配置
# 注册中心的地址
elasticjob.reg-center.server-lists=localhost:2181
# 注册中心的命名空间,用于区分不同的应用
elasticjob.reg-center.namespace=forlan-elastic-job
# 作业类名
elasticjob.jobs.mySimpleJob.elasticJobClass=cn.forlan.job.MySimpleJob
# 作业分片总数,用于并行执行作业
elasticjob.jobs.mySimpleJob.shardingTotalCount=2
# cron表达式,用于定义作业的触发时间
elasticjob.jobs.mySimpleJob.cron=0/2 * * * * ?
## 作业参数,可选
elasticjob.jobs.mySimpleJob.jobParameter=作业参数xxx
# 分片参数,用于指定每个分片的参数,格式数字=xxx,数字从0开始,如果多于前面的shardingTotalCount,也不会报错,只不过多的不会被执行
elasticjob.jobs.mySimpleJob.shardingItemParameters=0=广州,1=深圳,2=汕头
3、定义Job
SimpleJob接口是ElasticJob框架中的一个接口,用于定义分布式任务的执行逻辑,ShardingContext是一个分片上下文对象,包含了关于当前任务分片的信息,例如分片总数、当前分片项、当前分片参数等。
package cn.forlan.job;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.springframework.stereotype.Component;
@Component
public class MySimpleJob implements SimpleJob {
@Override
public void execute(ShardingContext shardingContext) {
// 作业执行逻辑
System.out.println("MySimpleJob is running.");
StringBuilder sb = new StringBuilder(shardingContext.getJobName());
sb.append(": ");
sb.append("分片总数: [" + shardingContext.getShardingTotalCount() + "]; ");
sb.append("作业参数: [" + shardingContext.getJobParameter() + "]; ");
sb.append("当前分片项: [" + shardingContext.getShardingItem() + "]; ");
sb.append("当前分片参数: [" + shardingContext.getShardingParameter() + "]; ");
System.out.println(sb.toString());
}
}
我们这里定义了一个名为MySimpleJob的分布式任务类,它实现了SimpleJob接口,重写了execute方法,通过ShardingContext对象获取分片相关信息,并在执行任务时将这些信息打印出来。
执行效果如下:
MySimpleJob is running.
mySimpleJob: 分片总数: [2]; 作业参数: [作业参数xxx]; 当前分片项: [0]; 当前分片参数: [广州];
MySimpleJob is running.
mySimpleJob: 分片总数: [2]; 作业参数: [作业参数xxx]; 当前分片项: [1]; 当前分片参数: [深圳];
二、ElasticJob-UI
ElasticJob-UI是ElasticJob的可视化管理控制台,包含了动态配置、作业管控、作业历史记录检索等功能。ElasticJob-UI可以帮助开发人员更方便地管理和监控分布式任务,下面我们来安装时间下。
1、下载
ElasticJob-UI下载地址
2、解压并启动
执行bin目录下的start.bat
3、访问控制台
默认配置如下:端口号8088,用户名和密码都为root
访问http://127.0.0.1:8088/
,配置注册中心,填写信息即可
然后选择连接,看到作业维度,可以进行修改
三、Elastic-Job分片理解
Elastic-Job中的分片指的是将一个任务拆分成多个小任务进行并行处理,每个小任务称为一个分片。这些分片可以被分配给不同的机器或者线程来执行,以提高任务的处理效率和并发能力。每个分片都是独立的,可以并行执行,最后将各个分片的结果汇总。这种方式可以提高任务的执行效率,并且可以很好地应对大规模任务的处理需求。
四、原理
Elastic-Job是一个分布式任务调度框架,它基于Zookeeper和分布式数据库实现了任务的分片和调度。其原理如下:
- 任务分片:Elastic-Job将一个任务分成多个子任务,每个子任务称为一个分片。分片的数量可以根据需求进行配置。
- 任务注册:任务的注册是通过Zookeeper实现的。每个任务在启动时会向Zookeeper注册自己的信息,包括任务名称、分片数量等。
- 任务调度:Elastic-Job使用分布式调度算法将任务的分片均匀地分配给可用的执行器节点。调度算法可以根据需求进行配置,常见的有平均分配和一致性哈希算法。
- 任务执行:每个执行器节点会监听Zookeeper上的任务分片信息,并根据分配到的分片进行任务的执行。执行器节点会定时向Zookeeper上报任务执行情况。
- 任务监控:Elastic-Job提供了任务监控功能,可以查看任务的执行情况、日志和统计信息。监控数据存储在分布式数据库中,可以通过Elastic-Job-UI进行查看。
通过以上原理,Elastic-Job实现了分布式任务的调度和执行,提供了高可用、高性能的分布式任务调度解决方案。