SpringBoot基础教程3-1-5 Elastic-Job-lite快速整合

1 概述

Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务,外部依赖仅Zookeepermysql

具体参考,官网git

2 核心理念

分布式调度github

  • Elastic-Job-Lite并没有做业调度中心节点,而是基于部署做业框架的程序在到达相应时间点时各自触发调度。
  • 注册中心仅用于做业注册和监控信息存储。而主做业节点仅用于处理分片和清理等功能。

做业高可用spring

  • Elastic-Job-Lite提供最安全的方式执行做业。将分片总数设置为1,并使用多于1台的服务器执行做业,做业将会以1主n从的方式执行。
  • 一旦执行做业的服务器崩溃,等待执行的服务器将会在下次做业启动时替补执行。开启失效转移功能效果更好,能够保证在本次做业执行时崩溃,备机当即启动替补执行。

最大限度利用资源sql

  • Elastic-Job-Lite也提供最灵活的方式,最大限度的提升执行做业的吞吐量。将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,做业将会合理的利用分布式资源,动态的分配分片项。
  • 例如:3台服务器,分红10片,则分片项分配结果为服务器A=0,1,2;服务器B=3,4,5;服务器C=6,7,8,9。 若是服务器C崩溃,则分片项分配结果为服务器A=0,1,2,3,4;服务器B=5,6,7,8,9。在不丢失分片项的状况下,最大限度的利用现有资源提升吞吐量。

3 添加依赖

<dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-core</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-spring</artifactId>
            <version>2.1.5</version>
</dependency>

4 配置文件

# 数据源配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8&verifyServerCertificate=false&useSSL=false&requireSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456

# zk配置
regCenter:
  serverList: localhost:2181
  namespace: elastic-job-lite-springboot

# 定时任务配置
simpleJob:
  cron: 0/5 * * * * ?
  shardingTotalCount: 3
  shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou

5 注册中心配置

@Configuration
@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
public class RegistryCenterConfig {
    
    @Bean(initMethod = "init")
    public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList,
                                             @Value("${regCenter.namespace}") final String namespace) {
        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
    }
}

6 事件追踪源配置

@Configuration
public class JobEventConfig {

    @Resource
    private DataSource dataSource;

    @Bean
    public JobEventConfiguration jobEventConfiguration() {
        return new JobEventRdbConfiguration(dataSource);
    }
}

7 任务配置

@Configuration
public class SimpleJobConfig {
    
    @Resource
    private ZookeeperRegistryCenter regCenter;
    
    @Resource
    private JobEventConfiguration jobEventConfiguration;
    
    @Bean
    public SimpleJob simpleJob() {
        return new SpringSimpleJob();
    }
    
    @Bean(initMethod = "init")
    public JobScheduler simpleJobScheduler(final SimpleJob simpleJob,
                                           @Value("${simpleJob.cron}") final String cron,
                                           @Value("${simpleJob.shardingTotalCount}") final int shardingTotalCount,
                                           @Value("${simpleJob.shardingItemParameters}") final String shardingItemParameters) {
        return new SpringJobScheduler(simpleJob, regCenter,
                getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters)
                , jobEventConfiguration);
    }
    
    private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass,
                                                         final String cron, final int shardingTotalCount,
                                                         final String shardingItemParameters) {
        return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(
                jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(),
                jobClass.getCanonicalName()))
                                   .overwrite(true).build();
    }
}

省略实体代码,请参考源码apache

8 测试结果

8.1 启动zk

  • 官网下载,zookeeper,解压,启动脚本/zookeeper-XX/bin/zkServer.sh

8.2 启动工程

9 工程目录

10 结束语

Elastic-Job-LiteXXL job最大的区别是,没有调度中心,更加轻量化,可是要依赖zk,读者能够根据本身项目需求选择,本文源码安全


欢迎关注博主公众号,第一时间推送最新文章springboot

欢迎关注博主公众号

相关文章
相关标签/搜索