SpringBoot集成系列--ElasticJob

2023-12-14 12:02:07

一、集成步骤

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实现了分布式任务的调度和执行,提供了高可用、高性能的分布式任务调度解决方案。

文章来源:https://blog.csdn.net/qq_36433289/article/details/133681988
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。