手把手带你构建一个简单的springCloud分布式任务调度组件
当前项目是基于SpringCloud,服务注册中心(eurake,nacos...)进行任务调度的思路。
目前完成的功能有:任务自动注册,任务统一管理,集中调度,支持多种路由规则(可拓展),任务调度日志,轻量级无需依赖quartz。
分布式任务调度和单体应用的任务调度的区别在于,通过将任务集中统一管理,无需每一个微服务都维护自己的任务。下面通过一个简单的示例来看看分布式任务调度的构建流程。
主要分为两大部分任务管理组件,和任务执行组件(都可以通过水平拓展来增加服务的容错性稳定性)
示例代码:https://github.com/awyFamily/nc-job.git
一、分布式任务管理中心部署:
1.新建数据库ncjob,执行初始化文件(resource/init/init.sql)
2.如果是基于eurake,则在pom文件中引用eurake client依赖,yml加入eurake配置【nacos同理】
3.更改yml文件中数据库配置信息
4.运行启动类
5.添加测试任务(需要先启动example项目)
6.立即执行测试
执行测试类,或请求url: localhost:9999/jobInfo/running/1
响应:被立即执行了
7.日志输出
二、执行器任务快速开始:
1.引入依赖包
<dependency>
<groupId>com.awyFamily</groupId>
<artifactId>nc-job-core</artifactId>
<version>${nc.job.version}</version>
</dependency>
2.yml文件加入配置
#任务配置
nc:job: provider:
#服务实例名(当前执行器)
jobServerId: nc-job-example
#任务包路径
taskPackagePath: com.yhw.nc.job.example.handler
3.增加配置类(主要作用扫描包)
@EnableFeignClients(JobCommonConstant.ADMIN_FEIGN_REMOTE_PATH)
@ComponentScan(JobCommonConstant.JOB_SCAN_PACKAGE_PATH)
@Configurationpublic class NcJobConfig {
}
4.开始第一个任务,在taskPackagePath包下新建任务,注意getName方法的值必须唯一,否则会导致重名任务找不到的情况
@Slf4j
@Component
public class TestNcTask extends AbstractNcTask {
@Override
protected void run(Integer jobId, String parameter) {
log.info("开始运行了:".concat(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))));
}
@Override protected String getName() {
return "测试任务";
}
}
5.运行启动类
启动后会自动注册任务的数据库:
如图所示:
三、其他信息
基于nacos实现:https://github.com/sunboy1/nacos_cloud.git
springboot单机版,基于quartz :https://github.com/sunboy1/quartz.git
想要了解分布式调度更多的信息请关注:https://github.com/xuxueli/xxl-job