任务调度中心实现方式(三) 事件驱动异步任务分发

 

1、初步设计的应用任务结构。jobkey设计为前缀“app_job-”+id. jobkey=triggerkey

任务管理表 折叠原码

DROP TABLE IF EXISTS `APPLICATION_TASK`;

CREATE TABLE `APPLICATION_TASK` (

  `id` bigint(10) NOT NULL AUTO_INCREMENT COMMENT 'id',

  `job_type` varchar(20) NOT NULL COMMENT 'cron、simple两种模式',

  `task_name` varchar(50) NOT NULL COMMENT '应用任务名称',

  `task_type` varchar(200) NOT NULL COMMENT '任务类型,可以直接使用TriggerMessage中的TriggerEvent定义的。需代码维护与Verticle的address的对应关系',

  `is_deleted` TINYINT(3) NOT NULL COMMENT '删除标识',

  `status` INT NOT NULL COMMENT '启停标识',

  `param_json` VARCHAR(500) COMMENT '不同任务需要的参数json,如数据归档需要制定数据表id',

  `ip` VARCHAR(20) NOT NULL COMMENT '执行任务的ip',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

任务记录表 折叠原码

DROP TABLE IF EXISTS `TASK_LOG`;

CREATE TABLE `TASK_LOG` (

  `id` bigint(10) NOT NULL AUTO_INCREMENT COMMENT 'id',

  `task_id` bigint(10) NOT NULL COMMENT 'task id',

  `task_name` varchar(50) NOT NULL COMMENT '应用任务名称',

  `task_type` varchar(200) NOT NULL COMMENT '任务类型,比如归档任务为DATAFILER',

  `start_time` DATETIME NOT NULL COMMENT '任务开始时间',

  `end_time` DATETIME NOT NULL COMMENT '任务结束时间',

  `execute_status` INT COMMENT '执行状态:成功、异常',

  `fail_message` VARCHAR(500) COMMENT '异常信息',

  `ip` VARCHAR(20) NOT NULL COMMENT '执行任务的ip',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、参数介绍。

1)、task_type.任务类型。对于开发好的不同后端逻辑的任务。比如:任务归档的任务类型为DATAFILER.task_type要与对应job的实现对应。

TaskType示例 折叠原码

public enum TaskType {

 

    DATAFILER(DataFilerJob.class);

    Class<? extends AbstractJob> jobClass;

    TaskType(Class<? extends AbstractJob> jobClass){

        this.jobClass = jobClass;

    }

    public Class<? extends AbstractJob> getJobClass() {

        return jobClass;

    }

}

上面的TaskType中用到了自定义Job。Job初步设计如下:

AbstractJob中统一完成落库操作 折叠原码

package com.back.task;

 

import com.back.model.AppTask;

 

/**

 * 这里思考对于任务记录操作能否统一处理

 * 如果能够统一处理,代表也可以在这里加控制。做一个是否持久化任务痕迹的配置

 * @author Administrator

 *

 */

public abstract class AbstractJob implements Job {

 

    private AppTask task;

    

    private TaskLog taskLog;

     

    public AbstractJob(AppTask task){

        this.task = task;

    }

    /**

     <

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值