SpringCloud

手把手带你构建一个简单的springCloud分布式任务调度组件

2019-10-04  本文已影响0人  原来Yhy

当前项目是基于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

上一篇下一篇

猜你喜欢

热点阅读