本發(fā)明涉及分布式系統(tǒng)管理及金融科技領(lǐng)域,尤其涉及一種分布式定時(shí)任務(wù)管理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、隨著金融行業(yè)業(yè)務(wù)的快速發(fā)展和服務(wù)應(yīng)用的擴(kuò)展,金融機(jī)構(gòu)后端服務(wù)集群中的定時(shí)任務(wù)數(shù)量從幾個(gè)增長(zhǎng)到了幾十甚至上百個(gè)。為滿足業(yè)務(wù)需求,定時(shí)任務(wù)的分布式管理變得尤為重要。然而,傳統(tǒng)的定時(shí)任務(wù)管理系統(tǒng),如elasticjob,逐漸暴露出其在擴(kuò)展性和性能方面的不足。
2、金融系統(tǒng)中,曾廣泛使用elasticjob來(lái)實(shí)現(xiàn)分布式定時(shí)任務(wù)調(diào)度,依賴于zookeeper進(jìn)行節(jié)點(diǎn)管理和任務(wù)協(xié)調(diào)。然而,隨著任務(wù)數(shù)量的增加,該方案面臨了以下幾個(gè)關(guān)鍵問(wèn)題:
3、對(duì)象初始化類別繁多:不同的定時(shí)任務(wù)對(duì)象初始化類別過(guò)多,導(dǎo)致系統(tǒng)在任務(wù)初始化過(guò)程中復(fù)雜度增加。
4、加載耗時(shí)與內(nèi)存消耗問(wèn)題:隨著定時(shí)任務(wù)的增多,系統(tǒng)在啟動(dòng)和加載任務(wù)時(shí)耗時(shí)過(guò)長(zhǎng),并且大量消耗內(nèi)存資源,影響系統(tǒng)性能。
5、依賴性問(wèn)題:elasticjob和zookeeper的依賴關(guān)系緊密,并且版本要求嚴(yán)格,導(dǎo)致項(xiàng)目在開(kāi)發(fā)和部署過(guò)程中變得過(guò)于復(fù)雜和臃腫。
6、因此,當(dāng)前金融機(jī)構(gòu)對(duì)定時(shí)任務(wù)管理方案提出了更高的要求,不僅需要解決任務(wù)調(diào)度的擴(kuò)展性問(wèn)題,還必須優(yōu)化任務(wù)加載的效率,減少系統(tǒng)資源的占用。此外,需要尋找一種更輕量級(jí)的分布式任務(wù)管理方案,以降低系統(tǒng)對(duì)zookeeper和elasticjob等中間件的過(guò)度依賴,實(shí)現(xiàn)更加靈活的任務(wù)調(diào)度和管理。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的主要目的在于提供一種分布式定時(shí)任務(wù)管理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),旨在解決現(xiàn)有技術(shù)在分布式定時(shí)任務(wù)管理中難以保證任務(wù)在多個(gè)節(jié)點(diǎn)之間的一致性,容易出現(xiàn)重復(fù)執(zhí)行或漏執(zhí)行的技術(shù)問(wèn)題。
2、為實(shí)現(xiàn)上述目的,本發(fā)明提供一種分布式定時(shí)任務(wù)管理方法,包括:
3、基于spring?boot創(chuàng)建項(xiàng)目,配置redis用于存儲(chǔ)和管理分布式定時(shí)任務(wù),并定義定時(shí)任務(wù)基類以啟動(dòng)定時(shí)任務(wù)調(diào)度功能;
4、在所述定時(shí)任務(wù)基類中使用@scheduled注解定義任務(wù)的執(zhí)行計(jì)劃,設(shè)立任務(wù)管理機(jī)制,配置任務(wù)的執(zhí)行范圍和線程號(hào),生成每個(gè)分布式定時(shí)任務(wù)的唯一標(biāo)識(shí);
5、記錄每個(gè)分布式定時(shí)任務(wù)的任務(wù)狀態(tài)信息,包括任務(wù)的執(zhí)行時(shí)間、執(zhí)行頻率和唯一標(biāo)識(shí);
6、在定時(shí)任務(wù)基類中定義任務(wù)的執(zhí)行方法,基于所述執(zhí)行時(shí)間和所述執(zhí)行頻率觸發(fā)任務(wù);
7、通過(guò)切面編程攔截分布式定時(shí)任務(wù)的執(zhí)行過(guò)程,在任務(wù)執(zhí)行前根據(jù)任務(wù)狀態(tài)信息判斷執(zhí)行條件;
8、在任務(wù)執(zhí)行過(guò)程中,生成并記錄任務(wù)的執(zhí)行信息,更新至redis,以反映任務(wù)的進(jìn)展;
9、在任務(wù)執(zhí)行完成時(shí),將任務(wù)的執(zhí)行過(guò)程信息整合為最終的執(zhí)行狀態(tài)信息,并更新至redis,用于記錄任務(wù)的執(zhí)行情況。
10、在一個(gè)實(shí)施例中,設(shè)立任務(wù)管理機(jī)制,配置任務(wù)的執(zhí)行范圍和線程號(hào),包括:
11、創(chuàng)建自定義注解redisjob,用于標(biāo)記需要分布式管理的定時(shí)任務(wù);
12、在redisjob注解中設(shè)定任務(wù)的分布式執(zhí)行屬性,用于判斷任務(wù)是否需要在多個(gè)節(jié)點(diǎn)之間協(xié)調(diào)執(zhí)行;
13、在redisjob注解中配置任務(wù)的執(zhí)行范圍,確定任務(wù)執(zhí)行時(shí)所使用的資源或目標(biāo)服務(wù);
14、在redisjob注解中指定任務(wù)的線程號(hào),用于控制任務(wù)在多個(gè)線程中的執(zhí)行順序;
15、在redisjob注解中設(shè)定任務(wù)是否為單節(jié)點(diǎn)執(zhí)行;
16、在任務(wù)調(diào)度過(guò)程中,依據(jù)redisjob注解中的配置信息,確定任務(wù)的分布式執(zhí)行方式,并根據(jù)所述分布式執(zhí)行方式將分布式定時(shí)任務(wù)分配至設(shè)定的節(jié)點(diǎn)或線程上執(zhí)行。
17、在一個(gè)實(shí)施例中,通過(guò)切面編程攔截分布式定時(shí)任務(wù)的執(zhí)行過(guò)程,包括:
18、使用aspect實(shí)現(xiàn)環(huán)繞攔截方法,攔截帶有redisjob注解的分布式定時(shí)任務(wù);
19、將basescheduleobject信息存儲(chǔ)在redis中,將schedulehashmap數(shù)據(jù)存儲(chǔ)在本地服務(wù)中;
20、通過(guò)攔截的redisjob注解的方法名,從basescheduleobject和scheduleobject中提取任務(wù)的執(zhí)行參數(shù),并根據(jù)提取的執(zhí)行參數(shù)管理分布式定時(shí)任務(wù)的執(zhí)行方式;
21、根據(jù)提取的執(zhí)行參數(shù),執(zhí)行分布式定時(shí)任務(wù)。
22、在一個(gè)實(shí)施例中,定義定時(shí)任務(wù)基類以啟動(dòng)定時(shí)任務(wù)調(diào)度功能,包括:
23、創(chuàng)建定時(shí)任務(wù)基類,并作為spring?bean注入應(yīng)用上下文,用于管理和執(zhí)行分布式定時(shí)任務(wù);
24、在所述定時(shí)任務(wù)基類中添加@enablescheduling注解,啟用定時(shí)任務(wù)調(diào)度功能,使任務(wù)按照預(yù)定的時(shí)間周期執(zhí)行;
25、若任務(wù)需要在多個(gè)線程中并行執(zhí)行,在所述定時(shí)任務(wù)基類中添加@enableasync注解,啟用異步執(zhí)行功能。
26、在一個(gè)實(shí)施例中,記錄每個(gè)分布式定時(shí)任務(wù)的任務(wù)狀態(tài)信息,包括:
27、定義基礎(chǔ)任務(wù)狀態(tài)對(duì)象basescheduleobject,用于存儲(chǔ)分布式定時(shí)任務(wù)的基礎(chǔ)信息;
28、在spring?boot應(yīng)用初始化時(shí),將基礎(chǔ)任務(wù)狀態(tài)對(duì)象basescheduleobject與所述定時(shí)任務(wù)調(diào)度功能關(guān)聯(lián);
29、在基礎(chǔ)任務(wù)狀態(tài)對(duì)象basescheduleobject中配置包括任務(wù)的執(zhí)行時(shí)間、執(zhí)行狀態(tài)和執(zhí)行節(jié)點(diǎn)的任務(wù)屬性;
30、創(chuàng)建擴(kuò)展任務(wù)狀態(tài)對(duì)象scheduleobject,并通過(guò)scheduleobject繼承basescheduleobject的結(jié)構(gòu);
31、在擴(kuò)展任務(wù)狀態(tài)對(duì)象scheduleobject中配置分布式任務(wù)的執(zhí)行參數(shù);
32、將擴(kuò)展任務(wù)狀態(tài)對(duì)象scheduleobject與定時(shí)任務(wù)調(diào)度功能綁定;
33、調(diào)整擴(kuò)展任務(wù)狀態(tài)對(duì)象scheduleobject中的任務(wù)配置信息,以與任務(wù)執(zhí)行過(guò)程一致。
34、在一個(gè)實(shí)施例中,通過(guò)切面編程攔截分布式定時(shí)任務(wù)的執(zhí)行過(guò)程,包括:
35、在定時(shí)任務(wù)通過(guò)@scheduled注解觸發(fā)時(shí),通過(guò)切面攔截帶有redisjob注解的分布式定時(shí)任務(wù)的執(zhí)行;
36、切面從redisjob注解中提取分布式定時(shí)任務(wù)的執(zhí)行條件,并從redis中讀取分布式定時(shí)任務(wù)的當(dāng)前狀態(tài);
37、基于所述分布式定時(shí)任務(wù)的當(dāng)前狀態(tài)和執(zhí)行條件,判斷分布式定時(shí)任務(wù)是否需要繼續(xù)執(zhí)行;
38、若分布式定時(shí)任務(wù)符合執(zhí)行條件,則執(zhí)行分布式定時(shí)任務(wù),若分布式定時(shí)任務(wù)執(zhí)行失敗,則根據(jù)分布式定時(shí)任務(wù)的重試配置決定是否重新執(zhí)行,并記錄分布式定時(shí)任務(wù)的執(zhí)行結(jié)果;
39、如果分布式定時(shí)任務(wù)不符合執(zhí)行條件,則跳過(guò)執(zhí)行。
40、在一個(gè)實(shí)施例中,基于spring?boot創(chuàng)建項(xiàng)目,配置redis用于存儲(chǔ)和管理分布式定時(shí)任務(wù),包括:
41、創(chuàng)建spring?boot項(xiàng)目,引入支持定時(shí)任務(wù)調(diào)度和redis存儲(chǔ)的依賴;
42、在項(xiàng)目配置文件中,定義redis連接參數(shù),包括主機(jī)地址、端口號(hào)和認(rèn)證信息;
43、初始化redis工具類,用于在分布式環(huán)境中存儲(chǔ)和讀取任務(wù)狀態(tài);
44、在任務(wù)執(zhí)行前,從redis讀取任務(wù)的當(dāng)前執(zhí)行狀態(tài),判斷任務(wù)是否符合執(zhí)行條件,在任務(wù)執(zhí)行后更新任務(wù)的最新執(zhí)行狀態(tài);
45、通過(guò)redis一致性機(jī)制,在多個(gè)節(jié)點(diǎn)間同步任務(wù)的執(zhí)行狀態(tài)。
46、進(jìn)一步地,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種分布式定時(shí)任務(wù)管理設(shè)備,所述分布式定時(shí)任務(wù)管理設(shè)備包括存儲(chǔ)器、處理器以及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的分布式定時(shí)任務(wù)管理程序,所述分布式定時(shí)任務(wù)管理程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如上述所述的分布式定時(shí)任務(wù)管理方法的步驟。
47、進(jìn)一步地,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種計(jì)算機(jī)存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)上存儲(chǔ)有分布式定時(shí)任務(wù)管理程序,所述分布式定時(shí)任務(wù)管理程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的分布式定時(shí)任務(wù)管理方法的步驟。
48、有益效果:本發(fā)明涉及一種分布式定時(shí)任務(wù)管理方法,基于spring?boot創(chuàng)建項(xiàng)目,配置redis進(jìn)行任務(wù)的存儲(chǔ)與管理,定義定時(shí)任務(wù)基類以實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度功能。使用@scheduled注解設(shè)定任務(wù)執(zhí)行計(jì)劃,配置任務(wù)的執(zhí)行范圍與線程號(hào),生成唯一標(biāo)識(shí),并記錄任務(wù)狀態(tài)信息,包括執(zhí)行時(shí)間與執(zhí)行頻率。在任務(wù)執(zhí)行前,通過(guò)切面攔截任務(wù),根據(jù)狀態(tài)信息判斷是否執(zhí)行,執(zhí)行過(guò)程中生成任務(wù)執(zhí)行信息并實(shí)時(shí)更新至redis。任務(wù)執(zhí)行結(jié)束后,將執(zhí)行過(guò)程信息整合為最終的執(zhí)行狀態(tài)信息,并同步至redis。在多個(gè)節(jié)點(diǎn)間,借助redis實(shí)現(xiàn)任務(wù)狀態(tài)共享與一致性管理。本發(fā)明有效避免了任務(wù)的重復(fù)執(zhí)行或漏執(zhí)行現(xiàn)象,提升了分布式任務(wù)的執(zhí)行效率與系統(tǒng)的穩(wěn)定性。