SpringBoot集成系列--ElasticJob

文章目录

一、集成步骤

1、添加 ElasticJob 的依赖

引入相关依赖到pom.xml

java 复制代码
<!-- 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 的配置

java 复制代码
# 注册中心的地址
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是一个分片上下文对象,包含了关于当前任务分片的信息,例如分片总数、当前分片项、当前分片参数等。

java 复制代码
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对象获取分片相关信息,并在执行任务时将这些信息打印出来。

执行效果如下:

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

相关推荐
小池先生1 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb5 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng8 分钟前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随15 分钟前
Redis内存碎片详解
java·开发语言
brrdg_sefg24 分钟前
gitlab代码推送
java
hanbarger1 小时前
mybatis框架——缓存,分页
java·spring·mybatis
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
苹果醋31 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
azhou的代码园1 小时前
基于JAVA+SpringBoot+Vue的制造装备物联及生产管理ERP系统
java·spring boot·制造