摘要:使用方法任務名稱對應調度策略中的任務名稱任務處理的對應處理機中的名稱心跳頻率秒假定服務死亡間隔秒保持默認線程數處理該任務的線程數,在沒有劃分多任務項的情況下,多線程是沒有意義的,且線程數大于任務項也是沒有意義的。
使用方法
任務名稱:對應調度策略中的任務名稱
任務處理的SpringBean:對應處理機中的Bean名稱
心跳頻率(秒)/假定服務死亡間隔(秒):保持默認
線程數:處理該任務的線程數,在沒有劃分多任務項的情況下,多線程是沒有意義的,且線程數 大于任務項也是沒有意義的。如果要開啟多機多線程,必須對數據做任務項過濾
處理模式:SLEEP(推薦)、NOSLEEP(單個線程處理完分配到的數據后,立刻會重新獲取數據)
每次獲取數據量:子計時單元開始,線程會不斷的去獲取數據(eachFetchDataNum參數),直到獲取不到數據子計時單元才結束
每次執行數量:執行機實現IScheduleTaskDealMulti接口時使用,handleTask方法參數arg0的數量(taskTypeInfo中executeNumber)
沒有數據時休眠時長(秒):
未設置開始時間:當獲取不到數據時,休眠此時間,再執行獲取數據操作
設置開始時間,未設置結束時間:無效(實際上子計時單元即將停止了)
設置開始時間,設置結束時間:當獲取不到數據時,休眠此時間,再執行獲取數據操作
每次處理完數據后休眠時間(秒):子計時單元內,兩次獲取數據操作間隔(對于總會返回數據的任務,使用這個配置來控制間隔)
執行開始時間:子計時任務開始時間
執行結束時間:子計時任務結束時間
單線程組最大任務項:配置單JVM處理的最大任務項數量,多任務項情況下,可按需限制,一般默認,多執行機會均衡分配(TBScheduleManager的任務調度器使用,未研究過。。)
策略名稱:策略標示,隨意填寫
任務類型:一般保持默認Schedule
任務名稱:對應任務欄被調度任務名稱
任務參數:一般不用,保持空
單JVM最大線程組數量:單個JVM允許開啟的線程數
最大線程組數量:多處理機情況下的線程總數限制(總線程數為2,如果配置任務項的線程為4是沒有意義的)
IP地址(逗號分隔):如圖說明,此處注意多處理機如果沒有根據任務項劃分數據處理,會導致多處理機重復處理數據
TBScheduleProcessorSleep多線程工作原理啟動task配置的threadNum數量的線程去處理任務。由其中一個線程去獲取任務并放入taskList隊列中,所有的線程從這個隊列中獲取任務執行。如果是Multi任務,可以一次取多個任務執行。在一個線程獲取任務的過程中,其他線程處于休眠狀態,任務獲取完畢喚醒其他線程。
TBScheduleProcessorSleep#loadScheduleData
IScheduleTaskDeal#selectTasks,由此方法的實現返回獲取的任務
兩次loadScheduleData之間有休眠,即在task上配置的SleepTimeInterval(每次處理完數據后休眠時間)
一旦TBScheduleProcessorSleep啟動了,會一直循環執行,直到PauseTimer讓其停止。但如果沒有配置結束時間,則一直運行。(對于運行間隔較短的任務,應通過上述休眠時間來實現控制)
注意事項計劃任務開始/恢復的時候Factory會創建TBScheduleProcessorSleep、TBScheduleProcessorNotSleep對象;計劃停止的時候,會將已經在執行的任務處理完,但是緩存在隊列中帶執行的任務將被丟棄
IScheduleTaskDealSingle和IScheduleTaskDealMulti兩個接口,除了execute方法上參數不同,功能上沒有區別
處理模式為Sleep下getComparator()沒有作用,一般情況下,使用Sleep模式
原理 zk數據的大致結構factory部分:
/rootPath/factory /rootPath/factory/facotoryUUID1 /rootPath/strategy /rootPath/strategy/strategy1 /rootPath/strategy/strategy1/factoryUUID1
factory(永久節點)存儲執行機注冊的主機信息,每個執行機啟動后,都會在factory下創建一個臨時順序子節點,該節點名是由TBSchedule源碼生成的主機唯一標示。每個factory對應一個執行機啟動的TBScheduleManagerFactory實例,每個JVM可以有多個factory實例,factory實例也可以存在于不同的JVM中。(一般一個JVM對應一個factory,即任務執行終端)
strategy(永久節點)是在調度機配置的任務策略,每個factory啟動時候回去檢查自己能處理哪幾個strategy,如果能處理則在/rootPath/strategy/strategy1/路徑下注冊自己,注冊的這個信息在tbschedule源碼里叫做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部分:
/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
baseTaskType(永久節點)存儲調度機創建的任務信息
例如:task1是在后臺配置的任務。
/rootPath/baseTaskType/task1/task1/server/scheduleServerUUID1表示可以用來處理任務的調度器,每個factory實例可以有多個ScheduleServer實例。
/rootPath/baseTaskType/task1/task1/taskItem表示配置任務時,每個任務可以拆分成幾個小的任務項。該節點的子節點,表示這個任務項運行時的信息,例如cur_server表示這個taskItem正在被哪個ScheduleServer處理。這些在tbschedule源碼里也叫作runningInfo。
任務配置為永久節點
[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實例,來真正處理配置的任務。
類之間的關系圖:
Factory 任務處理器(可以理解為JVM)
strategy 為配置的任務
一個Factory處理多個strategy,每個strategy下有多個IStrategyTask對象。
TBScheduleManager實現IStrategyTask接口,一個TBScheduleManager實例與ScheduleServer、IScheduleProcessor、IScheduleTaskDeal是一對一關系。
ScheduleServer是針對某個task的調度器
IScheduleProcessor是處理任務的多線程任務處理器,控制我們任務數據的循環執行(有TBScheduleProcessorSleep、TBScheduleProcessorNotSleep兩種實現)
IScheduleTaskDeal是我們需要實現的任務對象(架構組提供的AbstractTaskDealSingle、AbstractTaskDealMulti為其abstract實現)
http://www.jianshu.com/p/e925...
http://blog.csdn.net/taosir_z...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68093.html
摘要:指南無論你正在構建什么,這些指南都旨在讓你盡快提高工作效率使用團隊推薦的最新項目版本和技術。使用進行消息傳遞了解如何將用作消息代理。安全架構的主題指南,這些位如何組合以及它們如何與交互。使用的主題指南以及如何為應用程序創建容器鏡像。 Spring 指南 無論你正在構建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團隊推薦的最新Spring項目版本和技術。 入門指南 這些...
摘要:對于廣大的前端開發人員來說,網站構建本是家常便飯其中也不得不涉及到性能優化的問題。將不影響首屏的資源和當前屏幕資源不用的資源放到用戶需要時才加載,可以大大提升重要資源的顯示速度和降低總體流量按需加載會導致大量重繪,影響渲染性能。對于廣大的前端開發人員來說,網站構建本是家常便飯;其中也不得不涉及到性能優化的問題。之前也有接觸過,今天總結一下這方面的技巧,下面是我的一下認知,歡迎探討: ? Nu...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執行次查詢之后,查詢優化器都會重新評估查詢計劃。上一篇文章指南使用復合索引操作符如何使用索引索引對象和數組索引基數下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復合索引、$操作符如何使用索引、索引對象和數組、索引基數下一篇文章:MongoDB指南---13、索引類型 使用explain...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執行次查詢之后,查詢優化器都會重新評估查詢計劃。上一篇文章指南使用復合索引操作符如何使用索引索引對象和數組索引基數下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復合索引、$操作符如何使用索引、索引對象和數組、索引基數下一篇文章:MongoDB指南---13、索引類型 使用explain...
閱讀 3208·2021-11-08 13:18
閱讀 1363·2021-10-09 09:57
閱讀 1193·2021-09-22 15:33
閱讀 3985·2021-08-17 10:12
閱讀 5073·2021-08-16 11:02
閱讀 2689·2019-08-30 10:56
閱讀 971·2019-08-29 18:31
閱讀 3259·2019-08-29 16:30