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

相关推荐
腾渊信息科技公司40 分钟前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地2 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
IT_陈寒2 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学2 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
码事漫谈3 小时前
1999年的电商前夜和2026年的AI前夜 历史押韵但从不重复
后端
Conan在掘金3 小时前
鸿蒙报错速查:arkts-strict-typing Property does not exist on type 'object',object 装函数就炸,根因 + 真解法
后端
颜酱3 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
程序员cxuan4 小时前
Grok Build 被众人唾骂,结果老马把它开源了
人工智能·后端·程序员
莫逸风4 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
从零开始的代码生活_4 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法