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

相关推荐
让学习成为一种生活方式10 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画15 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
假装我不帅35 分钟前
asp.net framework从webform开始创建mvc项目
后端·asp.net·mvc
南宫生38 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
神仙别闹38 分钟前
基于ASP.NET+SQL Server实现简单小说网站(包括PC版本和移动版本)
后端·asp.net
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田1 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue
神里大人1 小时前
idea、pycharm等软件的文件名红色怎么变绿色
java·pycharm·intellij-idea
货拉拉技术1 小时前
货拉拉-实时对账系统(算盘平台)
后端