elastic-job分布式任务调度框架

elastic-job分布式任务调度框架

一、总体架构

elastic-job分布式任务调度框架_第1张图片

二、分片概念

1、分片为并发最小执行单元,根据zookeeper选举机制,会在注册的job服务实例中选举实例分配给分片节点,进行任务执行。其他为被分配的实例节点会作为候选节点,在执行节点宕机后,重新进行选举,从而实现好可用。

2、分片机制是为了提高任务执行能力,提高处理数据能力,提高任务系统吞吐量的目的。

3、分片相关参数,分片参数必须与分片数相匹配,否则会导致任务执行失败。

shardingItemParameters: 0=beijing,1=shanghai,2=zuzhou 

数字为分片索引,参数为执行分片任务时的参数,可根据实际业务进行并发处理业务数据。

三、调度任务类型

1、SimpleJob

简单调度任务,根据时间表达式corn,执行execute方法。

代码实例:

@Slf4j
@ElasticScheduler(
        cron = "${job.simple.cron}",
        shardingTotalCount = "${job.simple.shardingTotalCount}",
        jobParameters = "${job.simple.jobParameters}",
        shardingItemParameters = "${job.simple.shardingItemParameters}",
        description = "这是一个simpleJob测试类"
)
public class DemoSimpleJob implements SimpleJob {
    @Value("${server.port}")
    private String port;
    @Override
    public void execute(ShardingContext shardingContext) {
        log.info("当前线程:{}",Thread.currentThread().getName());
        log.info("当前任务分片端口:{}",port);
        log.info("分片数:{}",shardingContext.getShardingItem());
        log.info("分片参数:{}",shardingContext.getShardingParameter());
    }
}

2、DataflowJob

数据流调度任务,将数据抓取与数据处理分开。数据抓取方法fetchData返回值必须是null或空集合,否则fetchData方法会一直执行。

代码实例:

@Slf4j
@ElasticScheduler(
        cron = "${job.dataflow.cron}",
        shardingTotalCount = "${job.dataflow.shardingTotalCount}",
        jobParameters = "${job.dataflow.jobParameters}"
)
public class DemoDataflowJob implements DataflowJob<Message> {
    @Override
    public List<Message> fetchData(ShardingContext shardingContext) {
        return Lists.newArrayList(new Message());
    }
    @Override
    public void processData(ShardingContext shardingContext, List<Message> list) {
        log.info("执行抓取数据处理");
    }
}

四、注解与相关配置

1、注解参数说明

-名称 说明 必填 -默认值
name 任务名称,作为任务唯一key 默认为包名
cron 用于控制作业触发时间
shardingTotalCount 总分片数 1
shardingItemParameters 分片参数 例:0=a,1=b,2=c
jobParameters 任务参数,每个执行任务都会携带参数
description 任务描述 ----

2、注解支持直接赋值写法,同时支持spring表达式写法

直接写法:

@ElasticScheduler(
        cron = "0/5 * * * * ?",
        shardingTotalCount = "1",
        jobParameters = "a",
        shardingItemParameters = "0=beijing",
        description = "这是一个simpleJob测试类"
)

spring表达式写法

@ElasticScheduler(
        cron = "${job.simple.cron}",
        shardingTotalCount = "${job.simple.shardingTotalCount}",
        jobParameters = "${job.simple.jobParameters}",
        shardingItemParameters = "${job.simple.shardingItemParameters}",
        description = "job.simple.description"
)

配置文件

job:
  simple:
    cron: 0/5 * * * * ?
    shardingTotalCount: 1
    jobParameters: test
    shardingItemParameters: 0=beijing
    description: 这是一个基础任务
  dataflow:
    cron: 0/5 * * * * ?
    shardingTotalCount: 3
    jobParameters: test
    shardingItemParameters: 0=beijing,1=shanghai,2=zuzhou
    description: 这是一个数据流任务

五、调度任务控制台

1、调度任务控制太为单独部署服务,elastic-job-console.下载压缩包后,在服务器解压。打开bin目录,执行r如下命令,默认端口8899,打开浏览器http://服务器IP:8899 http://49.234.28.46:8899/#

./start.sh -p 端口号  

链接:https://pan.baidu.com/s/1jlc6Bv0L_6ktWDpASaCtdA
提取码:b05f

注:系统默认提供2个账号 root/root guest/guest

2、控制台操作

配置注册中心:

elastic-job分布式任务调度框架_第2张图片

elastic-job分布式任务调度框架_第3张图片

操作调度任务:

elastic-job分布式任务调度框架_第4张图片

你可能感兴趣的:(Quartz任务调度)