elastic-job分布式定时任务

elastic-job分布式定时任务

我们在项目开发中, 使用定时任务是避免不了的, 我们在部署定时任务时, 通常只部署一台机器.部署多台机器时, 同一个任务会执行多次.比如短信提醒, 每天定时的给用户下发短信, 如果部署了多台, 同一个用户将发送多条. 只部署一台机器可用性又无法保证. 今天向大家介绍一款开源产品, 分布式定时任务解决方案 ---- elastic-job

一、简介
  Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Elastic-Job-Cloud采用自研Mesos Framework的解决方案,额外提供资源治理、应用分发以及进程隔离等功能;简单的讲Elastic-Job-Lite就是一个分布式定时任务。此处我们只说Elastic-Job-Lite的使用。
    1.分片概念
  任务的分布式执行,需要将一个任务拆分为多个独立的任务分片项,然后由分布式的服务器分别执行某一个或几个分片项。
  Elastic-Job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需要自行处理分片项与真实数据的对应关系。
  2.作业高可用
  如果有一个应用挂掉,分片项将会重新分片,没有挂掉的应用将获得分片项0-9。
二、实际应用
    基于spring配置文件的应用

1.添加maven依赖



    com.dangdang
    elastic-job-lite-core
    ${latest.release.version}

 


    com.dangdang
    elastic-job-lite-spring
    ${latest.release.version}

2.spring配置



    
    

    
    



3.定时任务类

package com.liantuo.international.core.util;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.liantuo.international.core.service.IntlFlightChangeRecordService;
import com.liantuo.util.PropertyUtil;
import com.liantuo.util.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

public class AutoFlightChangeRecordTask implements SimpleJob {
    public static final Logger logger = Logger.getLogger(AutoFlightChangeRecordTask.class);

    @Autowired
    private IntlFlightChangeRecordService intlFlightChangeRecordService;

    @Override
    public void execute(ShardingContext shardingContext) {
        String isUpdate = PropertyUtil.getProperty("auto.flight.change.record.task", "/config/properties/system.properties");
        if (StringUtils.isBlank(isUpdate) || "false".equals(isUpdate)) {
            logger.info("系统自动检索平台XXXXXX的定时任务没开启或者没设置开启参数。。。。。。");
            return;
        }

        logger.info("系统自动检索平台XXXXXXX记录开始。。。。。。" + shardingContext.getShardingItem());

        switch (shardingContext.getShardingItem()) {
            case 0:
                createChangeOrderInfo();
                break;
            case 1:
                break;
        }
    }

    private void createChangeOrderInfo() {
        try {
            //处理相关业务
        }catch (Exception e){
            logger.info("系统自动检索平台XXXXXX错误。。。。");
            e.printStackTrace();
        }
    }

}

4. 配置文件
elastic-job.properties配置文件

elastic.server.list=192.168.7.65:2181,192.168.7.66:2181,192.168.7.67:2181
elastic.namespace=liantuo-job
elastic.base.sleep.time=1000
elastic.max.sleep.time=3000
elastic.max.retries=3

system.properties配置文件

auto.flight.change.record.task = true

5. 输出结果

你可能感兴趣的:(定时任务)