淘宝开源项目TbSchedule的部署和使用

TBSchedule淘宝开源定时任务调度框架(附客户端源码demo) 淘宝开源定时任务调度框架 下载TBSchedule源码svn地址:code.taobao.org/p/tbschedule/src/trunk/ 内容包括两部分:TBSchedule源码及开发依赖包tbschedule、调度控制台ScheduleConsole.war(配置监控查看运行状况)   TBSchedule介绍: 1)调度机的高可用有保障,多调度机向注册中心注册后,共享调度任务 阅读详情

tbschedule项目其实可以分为两部分:

  1. schedule管理控制台。负责控制、监控任务执行状态
  2. 实际执行job的客户端程序。

在实际使用时,首先要启动zookeeper, 然后部署tbschedule web界面的管理控制台,最后启动实际执行job的客户机器。这里zookeeper并不实际控制任务调度,它只是负责与N台执行job的客户端通讯,协调、管理、监控这些机器的运行信息。实际分配任务的是tbschedule管理控制台,控制台从zookeeper获取job的运行信息。

tbSchedule通过控制ZNode的创建、修改、删除来间接控制Job的执行,执行Job的客户端会监听它们对应ZNode的状态更新事件,从而达到通过tbSchedule控制Job执行的目的。

部署zookeeper

去http://zookeeper.apache.org/releases.html#download下载最新稳定版本。下载完成后解压,将 /conf目录下的XXX.cfg更名为zoo.cfg,因为zookeeper启动时会在这个目录下找zoo.cfg读取配置信息。这个文件里有几个重要的参数需要说明一下:

  • tickTime=2000
    • 定义时间计量单位。这里表示一个tick为2秒。以后在配置时间相关的东西时,都是以tick为单位的。
  • dataDir=/tmp
    • 定义快照(snapshot)文件的存储位置。zookeeper会将节点信息定时写入到这个目录中。这个目录必须存在,否则启动时会报错。
  • clientPort=2181
    • 指定客户端连接端口。 zookeeper会在这个端口监听连接请求。
  • server.1=127.0.0.1:2000:3000
    • 这个参数仅在集群部署时起作用。格式为:server.id=host:port:port。id表示服务器的唯一标识,一般从1开始计数。第一个port表示zookeeper集群机器之间的通讯端口,第二个port表示当集群机器在选举leader时使用的通讯端口。只有当集群第一次启动,或master机崩溃时,才会进行leader选举。

配置完成后,切换到/bin目录,执行:

./zkServer.sh start

即可启动zookeeper,默认会在后台运行,如果想在前端运行,需要执行:

./zkServer.sh start-foreground

Zookeeper集群部署

集群部署时,除了需要指定zoo.cfg中server.X:XXXX:XX:XX参数外,还要在每台机器的dataDir目录下创建一个名为myid的文件,内容为当前机器的标识数字,与server.X中的X相同。完成配置后,依次启动每个zookeeper即可。
注意,当你在启动第一个zookeeper时控制台会大量报错,这是因为其它的zookeeper还没有启动。无视即可。

tbSchedule控制台部署

tbSchedule就是个用servlet/JSP 写的web项目,我们可以直接把war包部署到tomcat中,然后在浏览器访问

http://localhost:8080/ScheduleConsole

即可。
如果你想手动编译、构建项目而不是使用war包,要小心一个坑,那就是执行

mvn clean install -Dmaven.test.skip=true

时maven会报找不到构件的错误。查其原因,是因为这个项目太老了,当时是用maven2构建的,项目中用到的依赖版本也比较老了,而且它们所在的repository已经停用了,因此无法自动下载。解决方法,直接exclusion缺少的依赖即可:

<dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.3.3</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

第一次访问控制台时会出现以下配置页面:
这里写图片描述
第一行指定zookeeper的地址、端口,第二行是超时时间。用户名和密码在这里没有任何用处,无视即可。要注意的是第三行Zookeeper的根目录,这并不是指的部署zookeeper时指定的dataDir,而是一个你自己指定的、与当前管理控制台在同一个机器上的目录,tbSchedule管理控制台会将任务的配置信息(如执行开始时间,调度策略)保存到该目录下,这样下次启动管理控制台时就可以直接从目录中读取配置信息了。

填写完成后点保存,此时上面会出现一行红字,无视之。直接点击管理主页即可进入管理页面:
这里写图片描述

至此tbSchedule控制台部署完毕。

tbSchedule客户端编写

tbSchedule项目的test/目录下有很多测试类,可以执行

mvn test

把测试跑一遍。跑之前要修改项目中schedule.xml文件正确填写zookeeper的连接地址。测试跑通则说明tbSchedule管理控制台和zookeeper都部署无误。

当我们要执行一个job时,需要创建新项目,引入tbschedule依赖,实现指定接口,然后打成jar包,通过

java -jar 你的jar名.jar

启动job。依赖如下:

<dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.taobao.pamirs.schedule</groupId>
            <artifactId>tbschedule</artifactId>
            <version>3.2.18</version>
        </dependency>

同时别忘了集成spring。

Main方法代码如下:

public static void main(String[] args) throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext(
                "spring-config.xml");

        TBScheduleManagerFactory scheduleManagerFactory = new TBScheduleManagerFactory();

        Properties p = new Properties();
        p.put("zkConnectString", "192.168.3.117:2181");
        p.put("rootPath", "/home/platform/data");
        p.put("zkSessionTimeout", "60000");
        p.put("userName", "ScheduleAdmin");
        p.put("password", "password");
        p.put("isCheckParentPath", "true");
        scheduleManagerFactory.setApplicationContext(ctx);
        scheduleManagerFactory.init(p);
        scheduleManagerFactory.setZkConfig(convert(p));


    }

执行这个方法后,你的程序就会向zookeeper发起连接,注册当前机器,请求任务队列,最后根据调度配置执行job。
job的执行代码需要配置成一个spring bean:

<bean id="testTaskBean" class="com.anzhi.schedule.task.TestTaskBean" >
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>

这个bean的骨架如下:

public class TestTaskBean implements IScheduleTaskDealSingle<PassportModel> {
    /**
     * 选择任务. 从DB中读取数据, 将取出的数据返回
     * @param taskParameter
     * @param ownSign
     * @param taskItemNum
     * @param taskItemList
     * @param eachFetchDataNum
     * @return
     * @throws Exception
     */
    public List<PassportModel> selectTasks(String taskParameter, String ownSign,
                                         int taskItemNum, List<TaskItemDefine> taskItemList,
                                         int eachFetchDataNum) throws Exception {

        List<PassportModel> list = new ArrayList<PassportModel>(1);
        list.add(new PassportModel());
        return list;
    }

    /**
     * 向目标表中插入数据
     * @param model
     * @param ownSign
     * @return
     * @throws Exception
     */
    public boolean execute(PassportModel model, String ownSign)
            throws Exception {
        try {
            //insertData(model);
            System.out.println("执行任务");

            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

其中泛型参数Passport是我们自定义的类。

tbSchedule的调用流程为:

  1. 执行selectTasks()方法,该方法返回一个List对象,表示你选择出的任务列表。
  2. 执行execute()方法,tbschedule会遍历你在selectTasks()方法中返回的List,然后对每一个元素都调用execute()方法。

任务调度的配置

进入tbSchedule管理控制台,创建一个新策略:
这里写图片描述

注意,任务名称格式为创建的任务名$自定义字符串。其中你自定义的字符串会被传递到selectTasks()方法中的ownSign参数中。

任务管理 -> 创建新任务:
这里写图片描述

这是对单个job的调度配置信息。
重要参数说明:

  • 任务名称
    • 就是刚才在配置策略时填写的名称($之前的部分)。
  • 处理模式
    • SLEEP模式
      • 当某一个线程任务处理完毕,从任务池中取不到任务的时候,检查其它线程是否处于活动状态。如果是,则自己休眠; 如果其它线程都已经因为没有任务进入休眠,当前线程是最后一个活动线程的时候,就调用业务接口,获取需要处理的任务,放入任务池中, 同时唤醒其它休眠线程开始工作。
    • NOTSLEEP模式
      • 当一个线程任务处理完毕,从任务池中取不到任务的时候,立即调用业务接口获取需要处理的任务,放入任务池中。
  • 任务项
    • 可以把任务划分为1,2,3,4,5,6,7,8, 9, 10一共10个任务碎片,10个任务碎片会被分配到10(刚才在创建调度策略中配置的)个线程组,那么每个线程组对应1个任务碎片,运行时任务项参数又被传递到bean任务类selectTasks方法的List queryCondition参数,例如第1个线程组调用selectTasks方法是queryCondition参数条件为1 ,第2个线程组执行参数条件为2。 我们需要在方法中自己解析这个数值,根据值的不同执行不同部分的任务。因为一个线程组会有多个线程,因此可以实现并行计算。

执行job

完成以上工作后,运行编写的job客户端,job即可被调度执行。
这里写图片描述

分布式开源调度框架TBSchedule原理与应用 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源码分析 4. 与其他开源调度框架对比 第二部分 TBSchedule分布式调度示例 1. TBSchedule源码下载 2. 引入源码Demo开发示例 3. 控制台配置任务调度 4. selectTasks方法参数说明 5. 创建调度策略参数说明 6. 创建任务参数说明第一部分 TBSchedule基本概念 阅读详情

相关推荐

淘宝定时任务 tbschedule实战

说明: tbschedule项目其实可以分为两部分: 1)schedule管理控制台。负责控制、监控任务执行状态2)实际执行job的客户端程序。在实际使用时,首先要启动zookeeper, 然后部署tbschedule web界面的管理控制台,最后启动实际执行job的客户机器。这里zookeeper并不实际控制任务调度,它只是负责与N台执行job的客户端通讯,协调、管理、监控这些机器的运行信息

convict_EVA的专栏 1万+

基于Zookeeper的TbSchedule任务调度服务部署以及应用

一、前言 前面已经说过zookeeper集群的部署,接下来我们在zookeeper集群的基础上部署tbSchedule任务调度,开始部署之前我们先来简要看看tbSchedule是什么? TBSchedule:分布式任务调度框架,主要是为了协调多节点处理相同任务的避免数据被重复处理的框架,处理方式主要分为“抢占式”和“协同分配式”,通过集群的节点分担大批量任务的处理,提高批量任务的处理效率。...

山山来驰的博客 1392

看我如何用kali实时截获隔壁"小姐姐"的上网隐私(结尾有彩蛋)

看我如何用kali实时截获隔壁&amp;amp;amp;quot;小姐姐&amp;amp;amp;quot;的手机图片等信息(结尾有彩蛋哦) 首先圈下重点:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或...

SoulCat 2万+

推荐开源项目:TBSchedule - 简洁高效的定时任务调度器

推荐开源项目:TBSchedule - 简洁高效的定时任务调度器 是一个轻量级、易部署和使用的分布式任务调度框架,适用于需要进行定时或周期性任务执行的各种场景。它的目标是让开发者能够以最小的学习成本,快速集成到现有系统中,实现强大的任务调度功能。 技术分析 设计理念 TBSchedule 采用了简单直观的设计,基于 Java 编写,支持 Spring Boot 集成,使得与现有Java应用的整合变...

gitblog_00071的博客 785

cadence capture CIS 之使用access创建数据库(.mdb)

cadence capture CIS 之使用access创建数据库(.mdb)准备工作新建数据库 准备工作 1、一台电脑; 2、安装 Microsoft access database; 新建数据库 打开你准备创建数据库的位置,右键单击——》新建——》 Microsoft access database(注意:文件格式要选*.mdb) 打开数据库文件,创建——》表; 对数据表进行编辑,编辑表头、编辑表的内容、增加表的数量; 编辑表头:选中要编辑的表——》表设计 编辑内容:类似于excel添

weixin_42256550的博客 3147

芯片级IO (Pad) Ring &IP Checklist

芯片级IO Ring,PAD Ring 和IP Checklist检查项目

weixin_37584728的博客 3571

深入理解分布式调度框架TBSchedule及源码分析

简介   由于最近工作比较忙,前前后后花了两个月的时间把TBSchedule的源码翻了个底朝天。关于TBSchedule的使用,网上也有很多参考资料,这里不做过多的阐述。本文着重介绍TBSchedule的运行机制,架构设计以及优化建议。通过学习别人的经验,来提高自己的技术能力,感受阿里人的智慧,也向阿里空玄,阿里玄难为开源贡献致敬。 zookeeper依赖   TBSchedule依赖于ZK...

weixin_34007020的博客 298

RAW、RGB、YUV图像格式的采样与存储原理详解

本文详细解析了RAW、RGB和YUV三种核心图像格式的采样与存储原理。RAW是传感器原始数据,信息完整但需后期处理;RGB直接对应显示,直观但数据量大;YUV通过亮色分离与色度下采样,在保证观感的前提下大幅提升传输与存储效率,是视频编码与流媒体的主流格式。理解其差异是图像处理与视频开发的基础。

e4f5g6h7的博客 516

taobao分布试调试管理框架TbSchedule整合部署教程

本教程介绍的是淘宝(taobao.com)开源技术分布试调试管理框架TbSchedule整合部署的入门知识,任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行。 一、前言 任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行。比如定时给用户发送邮件、将数据表中的数据同步到另一个数据表都是一个任务,这些相对耗时

miaozhuang08的专栏 1082

【Bug已解决】Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows la

原始报错:Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows laptops场景:用户在 Windows 笔记本上登录应用成功了,但随后每个业务请求都返回 401,提示"Missing bearer/basic authentication"。登录态像是"假的"——明明登了,请求却没带任何认证信息。多台 Windows 设备都能复现。

一键难忘的博客 593

国科大学习资料--计算机视觉(胡占义、董秋雷)--2018-2019第二学期期末试卷

国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 ...

无名何许人的博客 2167

TBSchedule HelloWorld

淘宝官方参考手册:http://code.taobao.org/p/tbschedule/wiki/index/ http://www.jianshu.com/p/e66aa342f0d1 1.TBSchedule项目其实可以分为两部分: ①TBSchedule管理控制台。负责监控,监控任务执行状态 ②实际执行job的客户端程序 在实际使用时,首先要启动zookeeper,然后部署T...

iteye_7017的博客 504

【Halcon-2D测量】set_metrology_object_param 函数功能(用于配置计量对象常规参数)

HALCON算子 set_metrology_object_param 是2D计量模块的核心配置工具,用于动态修改计量对象的测量区域、边缘检测和几何拟合参数。该算子需在检测前调用,支持批量或单独修改对象参数,包含三类关键参数:测量区域(如长度、间距)、边缘检测(如平滑Sigma、阈值)和几何拟合(如RANSAC阈值、最小分数)。使用时需注意参数互斥规则(如measure_distance优先于num_measures)和多线程同步要求。算子无输出参数,仅修改计量模型内部状态,需配合apply_metrolo

weixin_45590420的博客 291

淘宝分布式调度框架TBSchedule

一、TBSchedule初识 时下互联网和电商领域,各个平台都存在大数据、高并发的特点,对数据处理的要求越来越高,既要保证高效性,又要保证安全性、准确性。TBSchedule的使命就是将调度作业从业务系统中分离出来,降低或者是消除和业务系统的耦合度,进行高效异步任务处理。其实在互联网和电商领域TBSchedule的使用非常广泛,目前被应用于阿里巴巴、淘宝、支付宝、京东、聚美、汽车之家、国美等

GarfieldEr007的专栏 7922

YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 728

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

分布式调度框架TBSchedule

转载自:https://my.oschina.net/chaun/blog/653266 摘要: TBSchedule是一款非常优秀的高性能分布式调度框架,本文是作者结合多年使用TBSchedule的经验,在研读三遍源码的基础上完成。期间作者也与阿里空玄有过不少技术交流,并非常感谢空玄给予的大力支持。另外,作者写这篇文章的目的一是出于对TBSchedule的一种热爱,二是现在是一个资源共享、

song218888的专栏 1934

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TBSchedule初识

声明:本文为优快云原创投稿文章,未经许可,禁止任何形式的转载。  作者:周立伟(ITeye博客:mycolababy.iteye.com),京东商城高级工程师,关注分布式、高并发和Java中间件的研究。  责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@youkuaiyun.com,另有「优快云 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshugu

da sheng 的专栏 1175

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于TbSchedule任务调度管理框架的整合部署

 http://www.cnblogs.com/lengfo/p/4146797.html 关于TbSchedule任务调度管理框架的整合部署 一、前言 任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行。比如定时给用户发送邮件、将数据表中的数据同步到另一个数据表都是一个任务,这些相对耗时的操作通过任务调度系统来异步并行执行,既能提高任

strawbingo的专栏 9659

TBSchedule应用实战(零点五)—— 我什么时候该用TBSchedule

TBSchedule的中文释义为:淘宝分布式定时任务调度框架。这里我们先剧透一下tbs的执行能力: tbs开源版本依赖于Spring与Zookeeper。纯JAVA实现的调度过程以及优秀的并发处理代表其具备低耦合,可容灾,低资源占用,低故障率,高效率等特点。其主要用于在分布式...

choufuzhuo5419的博客 402
上一篇: SpringMVC通过Redis实现缓存主页
下一篇: 使用crontab执行GUI程序
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值