若是要开启多机多线程,必须对数据作任务项过滤
(对于总会返回数据的任务,使用这个配置来控制间隔)
此处注意多处理机若是没有根据任务项划分数据处理,会致使多处理机重复处理数据
启动task配置的threadNum数量的线程去处理任务。由其中一个线程去获取任务并放入taskList队列中,全部的线程从这个队列中获取任务执行。若是是Multi任务,能够一次取多个任务执行。在一个线程获取任务的过程当中,其余线程处于休眠状态,任务获取完毕唤醒其余线程。缓存
TBScheduleProcessorSleep
、TBScheduleProcessorNotSleep
对象;计划中止的时候,会将已经在执行的任务处理完,可是缓存在队列中带执行的任务将被丢弃factory部分:多线程
/rootPath/factory /rootPath/factory/facotoryUUID1 /rootPath/strategy /rootPath/strategy/strategy1 /rootPath/strategy/strategy1/factoryUUID1
FactoryRunningInfo
。调度配置为永久节点架构
[zk: 172.26.50.86:2181(CONNECTED) 56] get /rootPath/strategy/IScheduleTaskDealSingleTest {"strategyName":"IScheduleTaskDealSingleTest","IPList":["127.0.0.1"],"numOfSingleServer":0,"assignNum":1,"kind":"Schedule","taskName":"IScheduleTaskDealSingleTest","taskParameter":"0","sts":"resume"} [zk: 172.26.50.86:2181(CONNECTED) 57] get /rootPath/strategy/IScheduleTaskDealSingleTest/127.0.0.1$IAN$7D3122FC0C574603B6CFD0C146641A77$0000000000 {"strategyName":"IScheduleTaskDealSingleTest","uuid":"127.0.0.1$IAN$7D3122FC0C574603B6CFD0C146641A77$0000000000","requestNum":1,"currentNum":0,"message":""}
ScheduleServer部分:fetch
/rootPath/baseTaskType /rootPath/baseTaskType/task1 /rootPath/baseTaskType/task1/task1 /rootPath/baseTaskType/task1/task1/server /rootPath/baseTaskType/task1/task1/server/scheduleServerUUID1 /rootPath/baseTaskType/task1/task1/taskItem /rootPath/baseTaskType/task1/task1/taskItem/0 /rootPath/baseTaskType/task1/task1/taskItem/0/cur_server /rootPath/baseTaskType/task1/task1/taskItem/0/deal_desc /rootPath/baseTaskType/task1/task1/taskItem/0/parameter /rootPath/baseTaskType/task1/task1/taskItem/0/req_server /rootPath/baseTaskType/task1/task1/taskItem/0/sts
例如:task1是在后台配置的任务。
/rootPath/baseTaskType/task1/task1/server/scheduleServerUUID1表示能够用来处理任务的调度器,每一个factory实例能够有多个ScheduleServer实例。
/rootPath/baseTaskType/task1/task1/taskItem表示配置任务时,每一个任务能够拆分红几个小的任务项。该节点的子节点,表示这个任务项运行时的信息,例如cur_server表示这个taskItem正在被哪一个ScheduleServer处理。这些在tbschedule源码里也叫做runningInfo。ui
任务配置为永久节点spa
[zk: 172.26.50.86:2181(CONNECTED) 37] ls /rootPath/baseTaskType [IScheduleTaskDealSingleTest] [zk: 172.26.50.86:2181(CONNECTED) 39] get /rootPath/baseTaskType/IScheduleTaskDealSingleTest {"baseTaskType":"IScheduleTaskDealSingleTest","heartBeatRate":5000,"judgeDeadInterval":60000,"sleepTimeNoData":500,"sleepTimeInterval":0,"fetchDataNumber":500,"executeNumber":1,"threadNumber":1,"processorType":"SLEEP","permitRunStartTime":"0 * * * * ?","expireOwnSignInterval":1.0,"dealBeanName":"iScheduleTaskDealSingleTest","taskParameter":"0","taskKind":"static","taskItems":["0"],"maxTaskItemsOfOneThreadGroup":0,"version":0,"sts":"resume"}
TBScheduleManagerFactoryfactory
实例对象,管理这个factory内部全部的事情。ZKManager
负责与zk之间的链接,数据交换。IScheduleDataManager
负责/rootPath/baseTaskType及其子节点全部数据模型维护。ScheduleDataManger4ZK
负责/rootPath/factory、/rootPath/strategy及其字节点数据模型维护。IStrategyTask
每一个实例表明一个线程组,每一个strategy可对应多个IStrategyTask实例,来真正处理配置的任务。.net
类之间的关系图:线程
Factory 任务处理器(能够理解为JVM)
strategy 为配置的任务3d
一个Factory处理多个strategy,每一个strategy下有多个IStrategyTask对象。
TBScheduleManager实现IStrategyTask接口,一个TBScheduleManager实例与ScheduleServer、IScheduleProcessor、IScheduleTaskDeal是一对一关系。
ScheduleServer是针对某个task的调度器
IScheduleProcessor是处理任务的多线程任务处理器,控制咱们任务数据的循环执行(有TBScheduleProcessorSleep
、TBScheduleProcessorNotSleep
两种实现)
IScheduleTaskDeal是咱们须要实现的任务对象(架构组提供的AbstractTaskDealSingle
、AbstractTaskDealMulti
为其abstract实现)code
http://www.jianshu.com/p/e925...
http://blog.csdn.net/taosir_z...