若是要開啓多機多線程,必須對數據作任務項過濾
(對於總會返回數據的任務,使用這個配置來控制間隔)
此處注意多處理機若是沒有根據任務項劃分數據處理,會致使多處理機重複處理數據
啓動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...