每特教育螞蟻課堂-分布式定時(shí)xxljob_第1頁(yè)
每特教育螞蟻課堂-分布式定時(shí)xxljob_第2頁(yè)
每特教育螞蟻課堂-分布式定時(shí)xxljob_第3頁(yè)
每特教育螞蟻課堂-分布式定時(shí)xxljob_第4頁(yè)
每特教育螞蟻課堂-分布式定時(shí)xxljob_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余60頁(yè)可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一、簡(jiǎn)概XXL-JOB是一個(gè)輕量級(jí)分布式任務(wù)調(diào)度框架,其設(shè)計(jì)目標(biāo)是開(kāi)發(fā)迅速、學(xué)習(xí)特1Web頁(yè)面對(duì)任務(wù)進(jìn)行CRUD4HA(分布式):任務(wù)分布式執(zhí)行,任務(wù)"執(zhí)行器"支持集群部署,可保證HA;5Failover:執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇"故障轉(zhuǎn)移"情況下調(diào)度失Failover;6、一致性:“調(diào)度中心”通過(guò)DB鎖保證集群分布式調(diào)度的一致性,一次任務(wù)調(diào)度只10、郵 11、狀 任務(wù)進(jìn)度12、Rolling執(zhí)行日志:支持 查看調(diào)度結(jié)果,并且支持以Rolling方式實(shí)時(shí)查看13、GLUE:提供WebIDE,支持開(kāi)發(fā)任務(wù)邏輯代碼,動(dòng)態(tài)發(fā)布,實(shí)時(shí)編譯生30個(gè)版本的歷史版本回溯。發(fā)一次子任務(wù)的執(zhí)行,多個(gè)子任務(wù)用逗號(hào)分隔;16、推送maven倉(cāng)庫(kù):將會(huì)把穩(wěn)定版推送到maven倉(cāng)庫(kù),方便用戶17、任務(wù):執(zhí)行器會(huì)周期性自動(dòng)任務(wù),調(diào)度中心將會(huì)自動(dòng)發(fā)現(xiàn)的任務(wù)18HSH碌轉(zhuǎn)移等; 任務(wù):支持以GLUE模式開(kāi)發(fā)和運(yùn)行任務(wù),包括S、Python等 2觸發(fā):除了"Cron方式"和"任務(wù)依賴方式"觸發(fā)任務(wù)執(zhí)行之外,支持基于事發(fā)于2015年中,我在上創(chuàng)建XXL-JOB項(xiàng)目倉(cāng)庫(kù)并提交第一個(gè)commit,隨進(jìn)行系統(tǒng)結(jié)構(gòu)設(shè)計(jì),UI選型,交互設(shè)計(jì)……2015-11月,XXL-JOBRELEASEV1.0OSCHINA,XXL-JOBOSCHINA上獲得了@紅薯的熱門推薦,同期分別達(dá)到了OSCHINA的“熱門動(dòng)彈”第一和git.oschina的開(kāi)源軟件月熱度第于2015-12月,我將XXL-JOB到知識(shí)庫(kù),并且得到同事認(rèn)可于2016-01月,展開(kāi)XXL-JOB的接入和定制工作,在此感謝袁某和尹某于2017-05-13,在 舉辦的"第62期開(kāi)源中國(guó)源創(chuàng)會(huì)"的"放碼過(guò)來(lái)"環(huán)節(jié),我登臺(tái)對(duì)XXL-JOB做了 ,臺(tái)下五百位在場(chǎng)觀眾反響熱烈(圖文回顧)。大眾點(diǎn)評(píng)目前已接入XXL-JOB,別名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入應(yīng)用推薦升級(jí)版本)。據(jù)統(tǒng)計(jì),自2016-01-21接入至2017-07-07期間,該系統(tǒng)已調(diào)度約60萬(wàn)余次,表現(xiàn)優(yōu)異。新至今,XXL-JOB已接入多家公司的線上產(chǎn)品線,接入場(chǎng)景如業(yè)務(wù),O2O業(yè)務(wù)2016-07-19為止,XXL-JOB已接入的公司包括不限于:11、大眾點(diǎn)評(píng)2、山東學(xué)而網(wǎng)絡(luò)科;3;456、運(yùn)滿7(中國(guó)區(qū)89、九櫻天下)-10、 斯科(一)11億12(海爾131415161718、中國(guó)平安科19、杭州知時(shí)信息科20、博瑩科技)2122232425262728、中秀科技(無(wú)錫29303132、錢包行云3334(中國(guó)移動(dòng) 3536、增長(zhǎng)引擎)373839 泰久信息系4041424344、圳臨界線網(wǎng)絡(luò)科45、廣州知識(shí)圈網(wǎng)絡(luò)科46、國(guó)譽(yù)商47、海爾消費(fèi)金融,嗨付、夠花(海爾-接入的公司,歡迎在登記地址登記,登記僅僅為了產(chǎn)品推廣文檔地中文文English源碼倉(cāng)庫(kù)地源碼倉(cāng)庫(kù)Release倉(cāng)庫(kù)地<artifactId>xxl-job-/xuxueli/xxl-<!-core/--技術(shù)交社區(qū)交環(huán)Servlet/JSPSpring-二、快速初始化“調(diào)度數(shù)據(jù)庫(kù)請(qǐng)項(xiàng)目源碼并解壓,獲取"調(diào)度數(shù)據(jù)庫(kù)初始化SQL"并執(zhí)行即可,正常16張表。"調(diào)度數(shù)據(jù)庫(kù)初始化SQL"位置為/xxl- mysql實(shí)例;mysql做主從,調(diào)度中心集群節(jié)點(diǎn)務(wù)必強(qiáng)制走主庫(kù);編譯源解壓源碼,mavenIDE,maven進(jìn)行編譯即可,源碼結(jié)構(gòu)xxl-job-executor:執(zhí)行器Sample示例(選擇合適的版本執(zhí)行器,可直:xxl-job-executor-sample-spring:Spring版本,通Spring容器管理執(zhí)行器,比較通用,推薦這種方式通過(guò)Springboot管理執(zhí)行器;::xxl-job-executor-sample-jfinal:JFinalJFinalJFinal管理執(zhí)行器配置部署“調(diào)度中心調(diào)調(diào)度中心項(xiàng)目:xxl-job-步驟一:調(diào)度中心配置調(diào)度中心:地址請(qǐng)保持和2.1xxl.job.mail.sendNick=《任務(wù)調(diào)度平臺(tái)XXL-JOB調(diào)度中心通訊TOKEN,非空時(shí)啟用步驟二:部署項(xiàng)心地址:(該地址執(zhí)行器將會(huì)使用到,作至此“調(diào)度中心”步驟三:調(diào)度中心集群(可選集群部署唯一要求為:保證每個(gè)集群節(jié)點(diǎn)配置(db和登陸賬號(hào)等)保持一致。調(diào)db配置區(qū)分不同集群。調(diào)度中心在集群部署時(shí)可通過(guò)nginx負(fù)載均衡,此時(shí)可以為集群分配一個(gè)。該配置部署“執(zhí)行器項(xiàng)目“執(zhí)行“執(zhí)行器”項(xiàng)目:xxl-job-executor-sample-spring(如新建執(zhí)行器目,可參考該Sample示例執(zhí)行器項(xiàng)目的配置步驟步驟一:maven依pom"xxl-job-core"maven步驟二:執(zhí)行器xxl-jobxxl-jobadminaddresslist集群部署存在多個(gè)地址則用逗號(hào)分隔。執(zhí)行器將會(huì)使用該地址進(jìn)行"執(zhí)行器跳"和"任務(wù)結(jié)果回調(diào)"###xxl-job,accesstoken:執(zhí)行器通訊TOKENxxl-joblogpath取IP,多網(wǎng)卡時(shí)可手動(dòng)設(shè)置指定IP,手動(dòng)設(shè)置IP時(shí)將會(huì)綁定Host"。執(zhí)行器默認(rèn)端口為9999,執(zhí)行器IP"和"分組依據(jù);地址信息用于"AppNamexxl-jobexecutoraddress:執(zhí)行器"AppName"步驟三:執(zhí)行器組件配class="com.xxl.job.core.executor.XxlJobExecutor"class="com.xxl.job.core.executor.XxlJobExecutor"method="start"destroy-method="destroy"<!--配置02、執(zhí)行器Excutor配置:執(zhí)<beanpackage="com.xxl.job.executor.service.jobhandler"ponent-scan-<01、JobHandler掃描路徑:自動(dòng)掃描容器中JobHandler執(zhí)行器IP[選填]<propertyname="ip"value="${xxl.job.executor.ip}"<!--執(zhí)行器 [必須]--<propertyname="port"value="${xxl.job.executor.port}"/><!--執(zhí)行器AppName[選填],為空則關(guān)閉自 --<propertyname="appName"value="${xxl.job.executor.appname}"/><!--執(zhí)行 中心地址[選填],為空則關(guān)閉自 --<propertyname="adminAddresses"value="${xxl.job.admin.addresses}"/>執(zhí)行器日志路徑[必填<propertyname="logPath"value="${xxl.job.executor.logpath}"/><!- 令牌,非空則進(jìn)行匹配校驗(yàn)[選填<propertyname="accessToken"value="${xxl.job.accessToken}"/>步驟四:部署執(zhí)行器項(xiàng)目xxl-job-executor-sample-spring:項(xiàng)目xxl-job-executor-sample-spring:項(xiàng)目編譯打包成WAR包,并部署tomcat中xxl-job-executor-sample-springboot:項(xiàng)目編譯打包springboot類型的可執(zhí)行JAR包,命令啟動(dòng)即可至此“執(zhí)行器”步驟五:執(zhí)行器集群(可選調(diào)度中心地址"保持一致,執(zhí)行器根據(jù)該配置進(jìn)行執(zhí)行器自動(dòng)等操作開(kāi)發(fā)第一個(gè)任務(wù)“o本示例以新建一個(gè)“GLUE模式(Java)”運(yùn)行模式的任務(wù)為例。有關(guān)任務(wù)的詳細(xì)配置,請(qǐng)查看“章節(jié)三:任務(wù)詳解”(“GLUE模式(Java)”的執(zhí)行代碼托管到調(diào)度中心,相比“Bean模式任務(wù)”需要在執(zhí)行器項(xiàng)目開(kāi)發(fā)部署上線,更加簡(jiǎn)前提:請(qǐng)確認(rèn)“調(diào)度中心”和“執(zhí)行器”項(xiàng)目已經(jīng)成功部署并啟動(dòng)步驟一:新建任步驟二:“GLUE模式(Java)”任務(wù)開(kāi)發(fā)任務(wù)右側(cè)“GLUE”按鈕,進(jìn)入“GLUE編輯器開(kāi)發(fā)界面”,見(jiàn)下圖?!癎LUE模式(Java)”運(yùn)行模式的任務(wù)默認(rèn)已經(jīng)初始化了示例任務(wù)代碼,即打印 World。(“GLUE模式(Java)”運(yùn)行模式的任務(wù)實(shí)際上是一段繼承自IJobHandlerJava類代碼,它在執(zhí)行器項(xiàng)目中運(yùn)行,可使用@Resource/@Autowire注入執(zhí)行器里中的其他服務(wù),詳細(xì)介紹請(qǐng)查看第三章節(jié))步驟三:觸發(fā)執(zhí)“執(zhí)行”按鈕,可手動(dòng)觸發(fā)一次任務(wù)執(zhí)行(Cron表達(dá)式進(jìn)行任務(wù)調(diào)度出發(fā))步驟四:查看日任務(wù)右側(cè)“日志”按鈕,可前往任務(wù)日志界面查看任務(wù)日志。在任務(wù)日志Rolling方式實(shí)時(shí)查看任務(wù)在執(zhí)行器一側(cè)運(yùn)行輸出的日志信息,實(shí)時(shí)任務(wù)進(jìn)度;配置屬性詳細(xì)說(shuō)明--執(zhí)行器:任務(wù)的綁定的執(zhí)行器,任務(wù)觸發(fā)調(diào)度時(shí)將會(huì)自動(dòng)發(fā) 成功的行器行器實(shí)現(xiàn)任務(wù)自動(dòng)發(fā)現(xiàn)功能務(wù)必須綁定一個(gè)執(zhí)行器"執(zhí)行器管理進(jìn)行設(shè)置ROUND(輪詢RANDOM(隨機(jī)):隨機(jī)選CONSISTENT_HASH(一致性HASH):分組下機(jī)器地址相同,不同均勻散列在不同機(jī)器上,保證分組下機(jī)器分配JOB平均;且每個(gè)JOB固定調(diào)LEAST_FREQUENTLY_USED(最不經(jīng)常使用):?jiǎn)蝹€(gè)JOB對(duì)應(yīng)的每個(gè);LEAST_RECENTLY_USED(最近最久未使用):?jiǎn)蝹€(gè)JOB對(duì)應(yīng)的每個(gè);FAILOVER(故障轉(zhuǎn)移):按照順序依次進(jìn)行心跳檢測(cè),第一個(gè)心跳檢SHARDING_BROADCAST(分片廣播):廣播觸發(fā)對(duì)應(yīng)集群中所有執(zhí)行器Cron:觸發(fā)任務(wù)執(zhí)行的Cron表達(dá)式BEAN模式:任務(wù)以JobHandler方 在執(zhí)行器端;需要結(jié)"JobHandler"屬性匹配執(zhí)行器中任務(wù)GLUE模式(Java):任務(wù)以源碼方 在調(diào)度中心;該模式的任務(wù)實(shí)上是一段繼承自IJobHandler的Java"groovy"護(hù),它在執(zhí)行器項(xiàng)目中運(yùn)行,可使用@Resource/@Autowire注入執(zhí)行器里GLUE模式 ):任務(wù)以源碼方 在調(diào)度中心;該模式的任務(wù)際上是一段 GLUE模式(Python):任務(wù)以源碼方 在調(diào)度中心;該模式的任實(shí)際上是一段 GLUE模式(NodeJS):任務(wù)以源碼方 在調(diào)度中心;該模式的任實(shí)際上是一段 JobHandler"BEAN模式JobHandler類“@JobHander”注解自定義的value值子任務(wù)Key:每個(gè)任務(wù)都擁有一個(gè)唯一的任務(wù)Key(任務(wù)Key可以從任務(wù)單機(jī)串行(默認(rèn)):調(diào)度請(qǐng)求進(jìn)入單機(jī)執(zhí)行器后,調(diào)度請(qǐng)求進(jìn)入FIFO失敗告警(默認(rèn)):調(diào)度失敗時(shí),將會(huì)觸發(fā)失 ,如發(fā) 郵件然失敗將會(huì)觸發(fā)一失敗告警。注意當(dāng)任務(wù)以failover方式路由時(shí),每次失敗----;BEAN模步驟一:執(zhí)行器項(xiàng)目中,開(kāi)發(fā)1、新建一個(gè)繼承1、新建一個(gè)繼承com.xxl.job.core.handler.IJobHandlerJava類2、該類被Spring容器掃描為Bean實(shí)例,如加“@Component”3、添加“@JobHander(value="jobhandler名稱")”注解,注解的value值為自定義的JobHandler名稱,該名稱對(duì)應(yīng)的是調(diào)度中心新建任務(wù)的JobHandler屬性的值。(可參考Sample示例執(zhí)行器中的DemoJobHandler,見(jiàn)下圖步驟二:調(diào)度中心,新建調(diào)度任參考上文“配置屬性詳細(xì)說(shuō)明”模式",JobHandler屬性填寫(xiě)任務(wù)注解@JobHanderGLUE模式任務(wù)以源碼方式在調(diào)度中心,支持通過(guò)WebIDE更新,實(shí)時(shí)編譯和生JobHandler。開(kāi)發(fā)流程如下:步驟一:調(diào)度中心,新建調(diào)度任務(wù)參考上文“配置屬性詳細(xì)說(shuō)明”模式步驟二:開(kāi)發(fā)任務(wù)代碼選中指定任務(wù),點(diǎn)擊該任務(wù)右側(cè)“GLUE”GLUEWebIDE版本回溯功能(30個(gè)版本的版本回溯)GLUEWebIDE界面,選擇右上角下拉框“版本回溯”GLUE的更新歷史,選擇相應(yīng)版本即可顯GLUE代碼即回退到對(duì)應(yīng)的歷史版本;GLUE模式(S步驟一:調(diào)度中心,新建調(diào)度任參考上文“配置屬性詳細(xì)說(shuō)明”模式(S步驟二:開(kāi)發(fā)任務(wù)代碼選中指定任務(wù),點(diǎn)擊該任務(wù)右側(cè)“GLUE”GLUEWebIDE該模式的任務(wù)實(shí)際上是一段 "GLUE模式步驟一:調(diào)度中心,新建調(diào)度任參考上文“配置屬性詳細(xì)說(shuō)明”模式步驟二:開(kāi)發(fā)任務(wù)代碼選中指定任務(wù),點(diǎn)擊該任務(wù)右側(cè)“GLUE”GLUEWebIDE界面,在該界面支持對(duì)任務(wù)代碼進(jìn)行開(kāi)發(fā)(也可以在IDE中開(kāi)發(fā)完成后,粘該模式的任務(wù)實(shí)際上是一段"python"GLUE模式步驟一:調(diào)度中心,新建調(diào)度任參考上文“配置屬性詳細(xì)說(shuō)明”模式步驟二:開(kāi)發(fā)任務(wù)代碼選中指定任務(wù),點(diǎn)擊該任務(wù)右側(cè)“GLUE”GLUEWebIDE該模式的任務(wù)實(shí)際上是一段"nodejS"四、任務(wù)點(diǎn)擊進(jìn)入"執(zhí)行器管理"界面,如下1、"1、"調(diào)度中心OnLine:"右側(cè)顯 的"調(diào)度中心"列表,任務(wù)執(zhí)行結(jié)束后將會(huì)以failover的模式進(jìn)行回調(diào)調(diào)度中心通知執(zhí)行結(jié)果,避免回調(diào)的單風(fēng)險(xiǎn)的執(zhí)行器列表可通過(guò)"OnLine機(jī)器""+新增執(zhí)行器"彈框如下圖,可新增執(zhí)行器配執(zhí)行器屬性說(shuō)AppName:是每個(gè)執(zhí)行器集群的唯一標(biāo)示AppName,AppName:是每個(gè)執(zhí)行器集群的唯一標(biāo)示AppName,AppName為對(duì)象進(jìn)行自成功的執(zhí)行器供任務(wù)調(diào)度時(shí)使用名稱執(zhí)行器的名稱因?yàn)锳ppName限制字母數(shù)字等組成,可讀性不強(qiáng)名排序執(zhí)行器的排序系統(tǒng)中需要執(zhí)行器的地方,如任務(wù)新增 可用的執(zhí)行器列表 方式"為"手動(dòng)錄入"時(shí)有效,支持人新建任后保存即可。詳情頁(yè)參考章節(jié)"三、任務(wù)詳解"。編輯任編輯GLUE代GLUE選中指定任務(wù),點(diǎn)擊該任務(wù)右側(cè)“GLUE”GLUEWeb"3.2GLUE模式(Java)"暫停/可對(duì)任務(wù)進(jìn)行“暫?!焙汀盎謴?fù)”操作。需要注意的是,此處的暫停/恢復(fù)僅針對(duì)任務(wù)的后續(xù)調(diào)度觸為,不會(huì)影響到已經(jīng)觸發(fā)的調(diào)度任務(wù),如需終止已經(jīng)觸發(fā)的調(diào)度任務(wù),可查看“4.8終止運(yùn)行中的任務(wù)”手動(dòng)觸發(fā)一次調(diào)查看調(diào)度日運(yùn)行模式:觸發(fā)調(diào)度時(shí)任務(wù)的運(yùn)行模式,運(yùn)行模式可參考章節(jié)"執(zhí)行時(shí)間:"執(zhí)行器"中本次任務(wù)執(zhí)行結(jié)束后回調(diào)的時(shí)間"執(zhí)行日志"按鈕:點(diǎn)擊可查看本地任務(wù)執(zhí)行的詳細(xì)日志信息;詳見(jiàn)查看執(zhí)行日志"終止任務(wù)"按鈕:點(diǎn)擊可終止本地調(diào)度對(duì)應(yīng)執(zhí)行器上本任務(wù)的執(zhí)行線程查看執(zhí)行日“執(zhí)行日志”按鈕,可跳轉(zhuǎn)至執(zhí)行日志界面,可以查看業(yè)務(wù)代終止運(yùn)行中的任僅針對(duì)執(zhí)行中的任務(wù)?!敖K止任務(wù)”按鈕,將會(huì)向本任務(wù)執(zhí)行隊(duì)列。任務(wù)終止時(shí)通過(guò)"interrupt"執(zhí)行線程的方式實(shí)現(xiàn),將會(huì)觸發(fā)"InterruptedException"異常。因此如果JobHandlercatch到了該異常并消化掉的話,任務(wù)終止功能將不可用。因此,如果遇到上述任務(wù)終止不可用的情況,JobHandler"InterruptedException"(向上拋出),正確邏輯如下//}catch(Exceptione)if(einstanceofInterruptedException){throwe;}logger.warn("{}",}JobHandlercatch刪除執(zhí)行日作五、總體源 介/doc/doc文檔資/db調(diào)度數(shù)據(jù)庫(kù)”建/xxl-job-admin:調(diào)度中心,項(xiàng)目源/xxl-job-core公共Jar依-/xxl-job-executor-samples:執(zhí)行器,Sample示例項(xiàng)目(大家可在該項(xiàng)目上進(jìn)行開(kāi)發(fā),也可以將現(xiàn)有項(xiàng)目改造生成執(zhí)行器項(xiàng)目“調(diào)度數(shù)據(jù)庫(kù)”配XXL-JOBQuartz集群實(shí)現(xiàn),其“調(diào)度數(shù)據(jù)庫(kù)”Quartz11張集mysql表基礎(chǔ)上擴(kuò)展而成。XXL-JOBQuartz原生表結(jié)構(gòu)前綴(XXL_JOBQRTZ)-XXL_JOB_QRTZ_TRIGGER_GROUP-XXL_JOB_QRTZ_TRIGGER_GROUP:執(zhí)行器信息表-XXL_JOB_QRTZ_TRIGGER_REGISTRY:執(zhí)行XXL_JOB_QRTZ_TRIGGER_INFO:調(diào)度擴(kuò)展信息表:用于保存XXL-XXL_JOB_QRTZ_TRIGGER_LOG:調(diào)度日志表:用于保存XXL-JOB任-XXL_JOB_QRTZ_TRIGGER_LOGGLUE:任務(wù)GLUE日志:用于保存更新歷史,用于支持GLUE的版本回溯功能因此,XXL-JOB16架構(gòu)設(shè)設(shè)計(jì)思JobHandler,交由“執(zhí)行器”統(tǒng)一管理,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請(qǐng)求并執(zhí)行對(duì)應(yīng)的JobHandler務(wù)邏輯。系統(tǒng)組調(diào)度模塊(調(diào)度中心):負(fù)責(zé)管理調(diào)度信息,按照調(diào)度配置發(fā)出調(diào)度請(qǐng)求,自身統(tǒng)性能不再受限于任務(wù)模塊;支持可視化、簡(jiǎn)單且動(dòng)態(tài)的管理調(diào)度信息,包括任務(wù)新建,更新,刪除,GLUE開(kāi)發(fā)和任務(wù)等,所有上述操作都會(huì)實(shí)時(shí)生效,同時(shí)支持調(diào)度結(jié)果以及執(zhí)行日志,支持執(zhí)行器Failover。執(zhí)行模塊(執(zhí)行器)的執(zhí)行等操作,開(kāi)發(fā)和更加簡(jiǎn)單和高效;接收“調(diào)度中心”的執(zhí)行請(qǐng)求、終止架構(gòu)調(diào)度模塊剖quartz的不Quartz作為開(kāi)源作業(yè)調(diào)度中的佼佼者,是作業(yè)調(diào)度的首選。但是集群環(huán)境中QuartzAPI的方式對(duì)任務(wù)進(jìn)行管理,從而可以避免上述問(wèn)題,但是同樣存在問(wèn)題問(wèn)題一:調(diào)用API的的方式操作任務(wù),不人性化問(wèn)題二:需要持久化業(yè)務(wù)QuartzJobBean到底層數(shù)據(jù)表中,系統(tǒng)侵入性-問(wèn)題三:調(diào)度邏輯和QuartzJobBean耦合在同一個(gè)項(xiàng)目中,這將導(dǎo)致一XXL-JOBquartz常規(guī)Quartz的開(kāi)發(fā),任務(wù)邏輯一般在QuartzJobBean中,耦合很嚴(yán)重。XXL-JOB中“調(diào)度模塊”和“任務(wù)模塊”完全解耦,調(diào)度模塊中的所有調(diào)度任務(wù)使用同QuartzJobBeanRemoteHttpJobBean。不同的調(diào)度任務(wù)將各自參數(shù)在各自擴(kuò)展表數(shù)據(jù)中,當(dāng)觸發(fā)RemoteHttpJobBean執(zhí)行時(shí),將會(huì)解析不同的任務(wù)這種調(diào)用模型類似RPC調(diào)用,RemoteHttpJobBean提供調(diào)用的功能,而執(zhí)調(diào)度中心HA(集群QuartzMysql;集群分布式并發(fā)環(huán)境中使用QUARTZ定時(shí)任務(wù)調(diào)度,會(huì)在各個(gè)節(jié)點(diǎn)會(huì)上報(bào)任務(wù),存到數(shù)據(jù)庫(kù)中,執(zhí)行時(shí)會(huì)從##fororg.quartz.jobStore.tablePrefix=XXL_JOB_QRTZ_org.quartz.scheduler.instanceId:AUTOorg.quartz.jobStore.isClustered:trueorg.quartz.jobStore.clusterCheckinInterval:org.quartz.jobStore.clusterCheckinInterval:調(diào)度線程10org.quartz.threadPool.threadCount:10org.quartz.threadPool.threadPriority:nitializingThread:XXL-JOB系統(tǒng)務(wù)邏輯在執(zhí)行器執(zhí)行,調(diào)度中心每次調(diào)度僅僅負(fù)責(zé)一次調(diào)quartzQuartzJobBean中執(zhí)行業(yè)務(wù)邏輯,差別就像大象和羽毛;XXL-JOBJOB“輕”JOB一次運(yùn)行平均耗時(shí)基本"100ms"之內(nèi)(基本是網(wǎng)絡(luò)開(kāi)銷);因此,可以保證使用有限的線程支撐大量JOB10100個(gè)JOB正常運(yùn)行;XXL-JOB調(diào)度模塊的“調(diào)度中心”默認(rèn)不使用該注解,即默認(rèn)開(kāi)啟并行機(jī)制,因?yàn)镽emoteHttpJobBeanQuartzJobBean,這樣在多線程調(diào)度的情況下,調(diào)度XXL-JOB的每個(gè)調(diào)度任務(wù)雖然在調(diào)度模塊是并行調(diào)度執(zhí)行的,但是任務(wù)調(diào)度傳遞QuartzJobBpertiesmisfireorg.quartz.jobStore.misfireThreshold:org.quartz.jobStore.misfireThreshold:Misfire規(guī)則:withMisfireHandlingInstructionDoNothing:不觸發(fā)立即執(zhí)行,等待withMisfireHandlingInstructionIgnoreMisfires:以錯(cuò)過(guò)的第一個(gè)頻率時(shí)withMisfireHandlingInstructionFireAndProceed:以當(dāng)前時(shí)間為XXL-JOBmisfireCronScheduleBuildercronScheduleBuilderCronTriggercronTrigger日志回調(diào)服調(diào)度模塊的“調(diào)度中心”Web服務(wù)部署時(shí),一方面承擔(dān)調(diào)度中心功能,另一方API服務(wù)。任務(wù)“:9997:9998:9999”心跳檢測(cè),心跳失敗因此自動(dòng)跳過(guò),第二個(gè)依然心跳檢測(cè)失敗……直至心跳檢測(cè)調(diào)度日調(diào)度日志,針對(duì)單次調(diào)度,屬性說(shuō)明如下執(zhí)行器地址:任務(wù)執(zhí)行的機(jī)器地址JobHandler:Bean模式表示任務(wù)執(zhí)行的JobHandler名稱任務(wù)參數(shù):任務(wù)執(zhí)行的入?yún)⒄{(diào)度時(shí)間:調(diào)度中心,發(fā)起調(diào)度的時(shí)間調(diào)度結(jié)果:調(diào)度中心,發(fā)起調(diào)度的結(jié)果,SUCCESS調(diào)度備注:調(diào)度中心,發(fā)起調(diào)度的備注信息,如地址心跳檢測(cè)日志等執(zhí)行時(shí)間:執(zhí)行器,任務(wù)執(zhí)行結(jié)束后回調(diào)的時(shí)執(zhí)行結(jié)果:執(zhí)行器,任務(wù)執(zhí)行的結(jié)果,SUCCESS執(zhí)行備注:執(zhí)行器,任務(wù)執(zhí)行的備注信息,如異常日志等執(zhí)行日志:任務(wù)執(zhí)行過(guò)程務(wù)代碼中打印的完整執(zhí)行日志,見(jiàn)“4.7查看執(zhí)行任務(wù)依原理:XXL-JOB中每個(gè)任務(wù)都對(duì)應(yīng)有一個(gè)任務(wù)Key,同時(shí),每個(gè)任務(wù)支持設(shè)置屬性“子任務(wù)Key”,因此,通過(guò)“任務(wù)Key”可以匹配任務(wù)依賴關(guān)系。當(dāng)父任務(wù)執(zhí)行結(jié)束并且執(zhí)行成功時(shí),將會(huì)根據(jù)“子任務(wù)Key”匹配子任務(wù)依賴,如果在任務(wù)日志界面,點(diǎn)擊任務(wù)的“”的“查看任務(wù)"運(yùn)行模式"剖"Bean模式"任開(kāi)發(fā)步驟:可參考"章節(jié)三"BeanSpring的Bean類實(shí)例,它被在“執(zhí)行器”項(xiàng)目的Spring容器中。任務(wù)類需要加“@JobHander(value="名稱")”注解,因?yàn)椤皥?zhí)行器”Spring容器中的任務(wù)。任務(wù)類需要繼承統(tǒng)一接口“IJobHandler”execute方法中開(kāi)execute方法,執(zhí)行任務(wù)邏輯。"GLUE模式(Java)"任開(kāi)發(fā)步驟:可參考"章節(jié)三";原理:每個(gè)"GLUE模式(Java)"任務(wù)的代碼,實(shí)GroovyJava對(duì)象,同時(shí)注入此代碼中的Spring服務(wù)(請(qǐng)確保Glue代碼中的服務(wù)和類在“執(zhí)行器”項(xiàng)目中存在),然后調(diào)用該對(duì)象的execute方法,執(zhí)行任務(wù)邏輯。GLUE模式 )+GLUE模式(Python)+GLUE模式開(kāi)發(fā)步驟:可參考"章節(jié)三";原理:任務(wù)的源碼托管在調(diào)度中心,邏一份文件,然后通過(guò)Java代碼調(diào)用該 返回碼為0時(shí)表目前支持的類型如下 "GLUE模式)"時(shí)支""-"GLUE模式(Python)" "GLUE模式(NodeJS)" 執(zhí)行在項(xiàng)目啟動(dòng)時(shí),執(zhí)行器會(huì)通過(guò)“@JobHander”Spring容器中“Bean模式任務(wù)”valuekey管理起來(lái)?!皥?zhí)行器”接收到“調(diào)度中心”的調(diào)度請(qǐng)求時(shí),如果任務(wù)類型為“Bean模式”,將會(huì)匹配Spring容器中的“Bean模式任務(wù)”execute方法,執(zhí)行任務(wù)邏輯。如果任務(wù)類型為“GLUE模式”GLueJava對(duì)象,注入依賴Spring服務(wù)(注意:GlueSpring服務(wù),必須存在與該“執(zhí)行器”項(xiàng)Spring容器中),execute方法,執(zhí)行任務(wù)邏輯。任務(wù)日XXL-JOB會(huì)為每次調(diào)度請(qǐng)求生成一個(gè)單獨(dú)的日志文件,需要通過(guò)"XxlJobLogger.log"打印執(zhí)行日志,“調(diào)度中心”查看執(zhí)行日志時(shí)將會(huì)加載對(duì)應(yīng)的日(LOG4JAppender實(shí)現(xiàn),存在依賴限制,該方式在新版本已 格式為Jo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論