面試官:定時(shí)任務(wù)框架有哪些?xxl-job你了解多少?
我們知道目前java主流的三大定時(shí)任務(wù)框架有:Quartz、xxl-job、elastic-job。
Quartz
Spring Boot中的定時(shí)器Quartz是一種基于Java的開源調(diào)度框架,可以用于在指定時(shí)間執(zhí)行任務(wù)或在指定時(shí)間間隔內(nèi)重復(fù)執(zhí)行任務(wù)。
它提供了豐富的API和靈活的配置選項(xiàng),可以滿足各種不同的調(diào)度需求。在Spring Boot中,可以通過簡單的配置和注解來使用Quartz定時(shí)器,使得任務(wù)調(diào)度變得更加簡單和方便。
xxl-job
xxl-job是一個(gè)國內(nèi)開源的分布式任務(wù)調(diào)度平臺(tái),提供了任務(wù)調(diào)度、任務(wù)執(zhí)行、任務(wù)監(jiān)控、報(bào)警等功能,支持分布式部署,適用于大規(guī)模分布式任務(wù)調(diào)度場景。
elastic-job
elastic-job是一個(gè)國內(nèi)開源的分布式任務(wù)調(diào)度框架,提供了分布式任務(wù)調(diào)度、分布式數(shù)據(jù)流處理、分布式數(shù)據(jù)分片等功能,支持多種任務(wù)類型,適用于大規(guī)模分布式任務(wù)調(diào)度和數(shù)據(jù)處理場景。
三者各自的優(yōu)缺點(diǎn)是什么?
Quartz
優(yōu)點(diǎn):支持集群部署
缺點(diǎn):沒有自帶的管理界面;調(diào)度邏輯和執(zhí)行任務(wù)耦合在一起;維護(hù)需要重啟服務(wù)
總結(jié):針對目前項(xiàng)目情況,利弊相同
xxl-job
優(yōu)點(diǎn):支持集群部署;提供運(yùn)維界面維護(hù)成本??;自帶錯(cuò)誤預(yù)警;相對elastic-job來說不需要額外的組件(zookeeper);支持調(diào)度策略;支持分片;故障轉(zhuǎn)移?;更適合分布式
缺點(diǎn):相對Quartz來說需要多部署調(diào)度中心
總結(jié):針對目前項(xiàng)目情況,利大于弊
elastic-job
優(yōu)點(diǎn):支持集群部署;維護(hù)成本小
缺點(diǎn):elastic-job需要zookeeper,zookeeper集群高可用至少需要三臺(tái)服務(wù)器
總結(jié):針對目前項(xiàng)目情況,弊大于利
就目前三大定時(shí)任務(wù)框架的缺點(diǎn)和目前項(xiàng)目的狀況而言,還是建議選用xxl-job。
下面重點(diǎn)聊一下xxl-job。
xxl-job結(jié)構(gòu)圖:

xxl-job的組成角色:
調(diào)度中心 : 將調(diào)度行為抽象形成“調(diào)度中心”公共平臺(tái),而平臺(tái)自身并不承擔(dān)業(yè)務(wù)邏輯,“調(diào)度中心”負(fù)責(zé)發(fā)起調(diào)度請求
執(zhí)行器(觸發(fā)器): 將任務(wù)抽象成分散的JobHandler,交由“執(zhí)行器”統(tǒng)一管理,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請求并執(zhí)行對應(yīng)的JobHandler中業(yè)務(wù)邏輯
任務(wù): 具體執(zhí)行的邏輯代碼
“調(diào)度”和“任務(wù)”兩部分可以相互解耦,提高系統(tǒng)整體穩(wěn)定性和擴(kuò)展性。
xxl-job框架的使用步驟:
在XXL-job平臺(tái)上創(chuàng)建任務(wù),并設(shè)置任務(wù)的執(zhí)行時(shí)間和執(zhí)行頻率。
在Java應(yīng)用程序中引入XXL-job客戶端依賴,編寫任務(wù)執(zhí)行邏輯。
在Java應(yīng)用程序中創(chuàng)建JobHandler類,實(shí)現(xiàn)IJobHandler接口,并實(shí)現(xiàn)execute方法,該方法中編寫任務(wù)執(zhí)行邏輯。
在Java應(yīng)用程序中創(chuàng)建JobHandlerRegistry類,注冊JobHandler類。
在Java應(yīng)用程序中創(chuàng)建XxlJobSpringExecutor類,啟動(dòng)任務(wù)調(diào)度器。
xxl-job的一些特點(diǎn):
動(dòng)態(tài):支持動(dòng)態(tài)修改任務(wù)狀態(tài)、啟動(dòng) / 停止任務(wù),以及終止運(yùn)行中任務(wù),即時(shí)生效;
彈性擴(kuò)容縮容:一旦有新執(zhí)行器機(jī)器上線或者下線,下次調(diào)度時(shí)將會(huì)重新分配任務(wù);
路由策略:執(zhí)行器集群部署時(shí)提供豐富的路由策略,包括:第一個(gè)、最后一個(gè)、輪詢、隨機(jī)、一致性 HASH、最不經(jīng)常使用、最近最久未使用、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等;
阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時(shí)的處理策略,策略包括:單機(jī)串行(默認(rèn))、丟棄后續(xù)調(diào)度、覆蓋之前調(diào)度;
任務(wù)進(jìn)度監(jiān)控:支持實(shí)時(shí)監(jiān)控任務(wù)進(jìn)度;
運(yùn)行報(bào)表:支持實(shí)時(shí)查看運(yùn)行數(shù)據(jù),如任務(wù)數(shù)量、調(diào)度次數(shù)、執(zhí)行器數(shù)量等;以及調(diào)度報(bào)表,如調(diào)度日期分布圖,調(diào)度成功分布圖等;
線程池隔離:調(diào)度線程池進(jìn)行隔離拆分,慢任務(wù)自動(dòng)降級(jí)進(jìn)入 “Slow” 線程池,避免耗盡調(diào)度線程,提高系統(tǒng)穩(wěn)定性;
全異步:任務(wù)調(diào)度流程全異步化設(shè)計(jì)實(shí)現(xiàn),如異步調(diào)度、異步運(yùn)行、異步回調(diào)等,有效對密集調(diào)度進(jìn)行流量削峰,理論上支持任意時(shí)長任務(wù)的運(yùn)行
.......