当前项目是基于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.日志输出

 

 

二、执行器任务组件快速开始(参考example项目):

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)

@Configuration

public class NcJobConfig {





}

 

4.开始编写第一个任务,在taskPackagePath包下新建任务,注意getName方法的值必须唯一,否则会导致重名任务找不到的情况


import cn.hutool.core.date.DatePattern;

import com.yhw.nc.job.core.provied.AbstractNcTask;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;





import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;





@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.运行启动类

启动后会自动注册任务的数据库:

如图所示:

1

 

2

 

三、其他信息

想要了解分布式调度更多的信息请关注: https://github.com/xuxueli/xxl-job

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐