tbschedule使用

tbschedule使用

一、简介

tbschedule是淘宝开源的,能够让批量任务或变化的任务,被动态的分配到不同主机(可分布式)的jvm,不同的线程组中并行执行。所有任务能够不重复,不遗漏的执行。

二、tbschedule知识点

2.1 tbschedule特点

tbschedule特点如下:

  • 能够让批量任务或变化的任务,被动态的分配到不同主机(可分布式)的jvm,不同的线程组中并行执行。
  • 所有任务能够不重复,不遗漏的执行。
2.2 tbschedule实现
  • tbschedule的任务、策略等调度数据是存储在zookeeper中的。
  • tbschedule的执行是基于jdk的Timer和TimerTask实现的。
  • tbschedule中的任务,是依附于策略而运行的。也就是说,任务定义了要执行的行为,包括任务名称、取数据和数据处理的bean、每次取数的数量、执行的开始与结束时间、任务项等信息,而策略定义了要执行的任务、在哪台机器上执行、所有机器最大线程组,单个机器线程组数等,并控制任务的执行与停止。

三、tbschedule关键类

3.1 ZKManager

ZKManager就是最基本的zookeeper会话管理类,内容包括zookeeper的创建、会话的连接或重连接、关闭会话等。

3.2 TBScheduleManagerFactory

TBScheduleManagerFactory是tbschedule管理类,包含的功能有:

3.2.1 配置zookeeper

配置zookeeper,并创建zookeeper会话,zookeeper的配置信息有:zkConnectString, rootPath, userName, password, zkSessionTimeout, isCheckParentPath

3.2.2 调度任务和调度策略的管理器生成
  • ScheduleDataManager4ZK,调度任务管理器(对应在zookeeper中的数据),在此进行初始化和生成。
  • ScheduleStrategyDataManager4ZK,调度策略管理器(对应在zookeeper中的数据),在此进行初始化和生成。
3.2.3 调度服务的重启、停止等

如stopServer(String strategyName)、stopAll()、reStart()等。

3.3 ScheduleServer

任务处理器(可以理解为线程组),由一组线程(n个线程)组成,每个任务处理器有全局唯一的标识符,一般以IP$UUID[例如192.168.1.100$0C78F0C0FA084E54B6665F4D00FA73DC]的形式出现,一个任务类型的数据可以n个任务处理器处理。内分为Sleep模式和NotSleep模式:

3.3.1 sleep模式

sleep模式,当一线程处理完任务,同时从任务池取不到任务时,若其它线程仍工作,则自己休眠,若其它线程已休眠,则新调取需要处理的数据,同时唤醒其它休眠线程处理数据;

3.3.2 NotSleep模式

NotSleep模式,当一线程处理完任务,同时从任务池取不到任务时,则新调取需要处理的数据,同时唤醒其它休眠线程处理数据;

3.4 TaskItem

任务项,也就是将待处理的任务(数据),进行分片划分,

如:可以按数据的id按10取模,这样就将数年数据划分成了0、1、2、3、4、5、6、7、8、9共10个任务项;

也可按数据的首字母分成了A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z供26个任务项。

这个可以根据需要自行定义的。

3.5 TaskDealBean

自定义的任务处理类,需要实现Schedule的接口IScheduleTaskDealMulti(批处理)或者IScheduleTaskDealSingle(单任务处理),内部主要有两个方法,一个是筛选需当前任务处理器处理的数据,另一个是处理已筛选好的数据。

3.6 OwnSign

环境,指定运行环境,如:开发环境、测试环境、预发环境、生产环境。在筛选当前任务处理器需处理的数据时,会传入该参数。

3.7 ScheduleTaskType

任务的配置类,包括运行的线程数(threadNumber)、运行时间,任务项分组、没数据时的休眠时间、每次取数的量等

3.8 ScheduleStrategy

策略的配置类,所有机器的最大线程组数(assignNum),单个jvm的线程数(numOfSingleServer),运行机器(IPList)等信息。

四、tbschedule使用

这里以tbschedule与spring结合为例,介绍使用的开发步骤。其中尽可能多的理解tbschedule和spring后,能理解tbschedule与spring整合的方式其实有多种形式的,在此介绍一种方式 ,任务和策略在spring启动时进行自动注册。

4.1 添加maven依赖

另一种方式是直接下载源码,这种方式更好,因为目前版本的tbschedule是有bug的,如查看zookeeper连接信息时,tbschedule源码是新建已在代码写死的属性,或者读取tomcat中未有的tbschedule配置类,这是不对,应直接读取已有的zookeeper属性,当然直接maven依赖也不影响使用),spring依赖包在此略过。

<dependency>
  <groupId>com.taobao.pamirs.schedule</groupId>
  <artifactId>tbschedule</artifactId>
  <version>3.2.18</version>
</dependency>
<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.6</version>
</dependency>
4.2 下载tbschedule源码

下载地址:http://code.taobao.org/p/tbschedule,
将路径下的tbschedule/branches /3.1.0/src/WebRoot/schedule文件夹复制到工程webapp下,里面tbschdule的jsp文件,便于页面查看与控制任务执行。

4.3 编写自定义抽象任务类

编写自定义抽象任务类,内包含调度任务配置类scheduleTaskType和调度策略配置类scheduleStrategy,便于过会对任务进行自动注册任务和策略信息,该类同时可实现接口IScheduleTaskDealSingle,继承该抽象类的任务类实现其中的方法,如AbstractBaseScheduleTask.java:

public abstract class AbstractBaseScheduleTask<T> implements IScheduleTaskDealSingle<T> {
   
    /**
     * 调度任务的配置
     */
    private ScheduleTaskType scheduleTaskType;
    /**
     * 调度策略的配置
     */
    private ScheduleStrategy scheduleStrategy;

    public ScheduleTaskType getScheduleTaskType() {
   
        return scheduleTaskType;
    }

    public void setScheduleTaskType(ScheduleTaskType scheduleTaskType) {
   
        this.scheduleTaskType = scheduleTaskType;
    }

    public ScheduleStrategy getScheduleStrategy() {
   
        return scheduleStrategy;
    }

    public void setScheduleStrategy(ScheduleStrategy scheduleStrategy) {
   
        this.scheduleStrategy = scheduleStrategy;
    }
}
4.4 编写启动类

编写启动类,继承TBScheduleManagerFactory类,用于配置zookeeper信息,实现ApplicationListener接口,并实现其内部方法,用于在spring容器启动后,加载调度任务和调度策略的配置信息到zookeeper中,如类SystemTBScheduleManagerFactory.java :

public class SystemTBScheduleManagerFactory extends TBScheduleManagerFactory implements ApplicationListener
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值