本技術(shù)涉及異步通信,尤其涉及一種異步消息處理方法、設(shè)備和存儲(chǔ)介質(zhì)。
背景技術(shù):
1、消息中間件是一種應(yīng)用于分布式系統(tǒng)間進(jìn)行消息傳遞的常用軟件,其提供了一套異步通信機(jī)制,使得各服務(wù)間可以獨(dú)立運(yùn)行,無需直接調(diào)用,有效幫助系統(tǒng)間實(shí)現(xiàn)解耦,從而提高了微服務(wù)系統(tǒng)的擴(kuò)展性和容錯(cuò)性。
2、微服務(wù)架構(gòu)已是當(dāng)前系統(tǒng)建設(shè)主流,系統(tǒng)模塊化拆分更趨于精細(xì),這種架構(gòu)可以很大程度保障系統(tǒng)高可用,使得各模塊間相互獨(dú)立,任何一方故障可以最大程度降低對(duì)系統(tǒng)整體可用性產(chǎn)生影響。尤其針對(duì)重要復(fù)雜系統(tǒng),微服務(wù)分工更為明確?;诖耍到y(tǒng)間相互通信必不可少,消息中間件的出現(xiàn)降低了系統(tǒng)間通信成本,其被廣泛應(yīng)用于微服務(wù)間異步調(diào)用、解耦及流量削峰等場(chǎng)景。
3、現(xiàn)有情況中,針對(duì)不同業(yè)務(wù)場(chǎng)景下消息中間件常見的消息失敗、丟失及冪等重試機(jī)制,缺乏通用異步重試機(jī)制和異構(gòu)降級(jí)機(jī)制。
4、上述內(nèi)容僅用于輔助理解本技術(shù)的技術(shù)方案,并不代表承認(rèn)上述內(nèi)容是現(xiàn)有技術(shù)。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)的主要目的在于提供一種異步消息處理方法、設(shè)備和存儲(chǔ)介質(zhì),旨在解決不同業(yè)務(wù)場(chǎng)景下消息中間件常見的消息失敗、丟失及冪等重試機(jī)制,缺乏通用異步重試機(jī)制和異構(gòu)降級(jí)機(jī)制的技術(shù)問題。
2、為實(shí)現(xiàn)上述目的,本技術(shù)提出一種異步消息處理方法,所述的方法包括:
3、接收第一業(yè)務(wù)系統(tǒng)發(fā)送的異步消息和本地異步記錄;
4、處理所述異步消息,根據(jù)處理結(jié)果更新所述本地異步記錄并返回所述第一業(yè)務(wù)系統(tǒng);
5、掃描所述本地異步記錄,判斷是否存在超時(shí)未處理或失敗記錄;
6、若存在超時(shí)未處理或失敗記錄,判斷消息中間件是否可用;
7、若所述消息中間件可用,則發(fā)起異步消息重試,否則申請(qǐng)第二業(yè)務(wù)系統(tǒng)異步線程。
8、在一實(shí)施例中,所述處理所述異步消息的步驟包括:
9、將異步消息從待處理狀態(tài)轉(zhuǎn)移到處理中狀態(tài),對(duì)所述異步消息加鎖;
10、等待所述異步消息處理中狀態(tài)處理完成,根據(jù)處理完成結(jié)果將所述異步消息轉(zhuǎn)移到失敗或成功狀態(tài),并對(duì)所述異步消息加鎖;
11、若檢測(cè)到所述處理完成結(jié)果為失敗狀態(tài)時(shí),將所述異步消息轉(zhuǎn)移到待處理狀態(tài)重試;
12、若檢測(cè)到所述異步消息在處理中狀態(tài)時(shí)存在其他異步消息,則觸發(fā)并發(fā)消費(fèi)控制策略,丟棄所述其他異步消息;
13、若檢測(cè)到所述異步消息在成功或失敗狀態(tài)時(shí)存在其他異步信息,則觸發(fā)冪等消費(fèi)控制策略,丟棄所述其他異步消息。
14、在一實(shí)施例中,所述根據(jù)處理結(jié)果更新所述本地異步記錄并返回所述第一業(yè)務(wù)系統(tǒng)的步驟包括:
15、根據(jù)處理結(jié)果獲取異常消息,更新本地異步記錄至第二業(yè)務(wù)系統(tǒng);
16、通過所述第二業(yè)務(wù)系統(tǒng)向第一業(yè)務(wù)系統(tǒng)發(fā)送異常消息接收確認(rèn);
17、通過調(diào)用所述第一業(yè)務(wù)系統(tǒng)提供的api更新本地異步記錄;
18、發(fā)送更新請(qǐng)求至所述第一業(yè)務(wù)系統(tǒng)并更新所述第一業(yè)務(wù)系統(tǒng)的本地異步記錄狀態(tài);
19、在更新所述第一業(yè)務(wù)系統(tǒng)的本地異步記錄后,所述第一業(yè)務(wù)系統(tǒng)向所述第二業(yè)務(wù)系統(tǒng)返回確認(rèn)響應(yīng),表示更新操作已完成。
20、在一實(shí)施例中,所述掃描所述本地異步記錄,判斷是否存在超時(shí)未處理或失敗記錄的步驟包括:
21、判斷本地異步記錄中是否存在失敗記錄;
22、若所述本地異步記錄中存在失敗記錄,則判斷異步消息處理異常導(dǎo)致的任務(wù)失敗是否未超過最大失敗次數(shù),若未超過最大失敗次數(shù),則將異步消息轉(zhuǎn)換到待處理狀態(tài);
23、若所述本地異步記錄中不存在失敗記錄,則進(jìn)一步判斷是否存在超時(shí)未處理記錄;
24、若存在超時(shí)未處理記錄,則判斷是否因異步消息數(shù)目多,但異步線程資源不足、異步消息丟失導(dǎo)致的超時(shí)未處理,否則判斷異步消息處理是否超過預(yù)設(shè)最大允許時(shí)間,若超過預(yù)設(shè)最大允許時(shí)間,則通過兜底作業(yè)統(tǒng)一掃描出來,并重新發(fā)出異步消息。
25、在一實(shí)施例中,所述發(fā)起異步消息重試包括:
26、當(dāng)異步消息因本地異步調(diào)度處理異?;蚓€程資源不足導(dǎo)致超時(shí)未處理時(shí),轉(zhuǎn)移到待處理狀態(tài)等待重新發(fā)出異步消息;
27、所述異步消息重新發(fā)出后從待處理狀態(tài)轉(zhuǎn)移到處理中狀態(tài),并對(duì)所述異步消息加鎖;
28、若處理中狀態(tài)的異步消息失敗則重試,轉(zhuǎn)移回待處理狀態(tài),若線程資源充足則繼續(xù)處理,保持在處理中狀態(tài);
29、通過兜底作業(yè)統(tǒng)一掃描超時(shí)待處理異步,并發(fā)出異步消息恢復(fù)待處理狀態(tài);
30、所述異步消息從處理中狀態(tài)處理完成后,根據(jù)處理結(jié)果轉(zhuǎn)移到失敗或成功狀態(tài),并對(duì)所述異步消息加鎖;
31、判斷處理結(jié)果中終態(tài)次數(shù)是否達(dá)到上限,如果所述終態(tài)次數(shù)達(dá)到上限則保持在失敗狀態(tài),否則保持成功狀態(tài)。
32、在一實(shí)施例中,所述發(fā)起異步消息重試還包括:
33、異步消息處理的個(gè)性化配置,所述個(gè)性化配置包括:
34、調(diào)整失敗重試的間隔時(shí)間、失敗重試的上限次數(shù)、處理中的最大等待時(shí)間、待處理的最大等待時(shí)間。
35、在一實(shí)施例中,所述申請(qǐng)第二業(yè)務(wù)系統(tǒng)異步線程的步驟包括:
36、當(dāng)消息中間件不可用時(shí),第一業(yè)務(wù)系統(tǒng)通過兜底作業(yè)統(tǒng)一掃描超時(shí)待處理異步,并申請(qǐng)第二業(yè)務(wù)系統(tǒng)本地線程池處理異步消息;
37、所述第一業(yè)務(wù)系統(tǒng)通過所述本地線程池中的線程對(duì)待處理狀態(tài)的異步消息加鎖,并繼續(xù)處理轉(zhuǎn)換為處理中狀態(tài);
38、所述第一業(yè)務(wù)系統(tǒng)等待所述異步消息處理中狀態(tài)處理完成,根據(jù)處理結(jié)果轉(zhuǎn)換為成功狀態(tài)或失敗狀態(tài),并對(duì)所述異步消息加鎖。
39、在一實(shí)施例中,所述第二業(yè)務(wù)系統(tǒng)本地線程池處理異步消息的步驟包括:
40、判斷第二業(yè)務(wù)系統(tǒng)本地線程池當(dāng)前運(yùn)行的線程與核心線程數(shù)的數(shù)量關(guān)系;
41、如果所述第二業(yè)務(wù)系統(tǒng)本地線程池當(dāng)前運(yùn)行的線程少于核心線程數(shù),則創(chuàng)建新線程執(zhí)行任務(wù);
42、如果所述第二業(yè)務(wù)系統(tǒng)本地線程池當(dāng)前運(yùn)行的線程達(dá)到核心線程數(shù),則將任務(wù)加入消息隊(duì)列,采用阻塞隊(duì)列,直接創(chuàng)建新的線程來處理任務(wù);
43、如果所述第二業(yè)務(wù)系統(tǒng)本地線程池創(chuàng)建新線程使當(dāng)前運(yùn)行的線程超過最大線程數(shù),則通過采用拒絕策略,彈出拒絕執(zhí)行異常,拒絕執(zhí)行任務(wù)。
44、此外,為實(shí)現(xiàn)上述目的,本技術(shù)還提出一種異步消息處理裝置,所述異步消息處理裝置包括:
45、信息接收模塊,用于接收第一業(yè)務(wù)系統(tǒng)發(fā)送的異步消息和本地異步記錄;
46、消息處理模塊,用于處理所述異步消息,根據(jù)處理結(jié)果更新所述本地異步記錄并返回所述第一業(yè)務(wù)系統(tǒng);
47、第一判斷模塊,用于掃描所述本地異步記錄,判斷是否存在超時(shí)未處理或失敗記錄;
48、第二判斷模塊,若存在超時(shí)未處理或失敗記錄,判斷消息中間件是否可用;若所述消息中間件可用,則發(fā)起異步消息重試,否則申請(qǐng)第二業(yè)務(wù)系統(tǒng)異步線程。
49、此外,為實(shí)現(xiàn)上述目的,本技術(shù)還提出一種異步消息處理設(shè)備,所述設(shè)備包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序配置為實(shí)現(xiàn)如上文所述的異步消息處理方法的步驟。
50、此外,為實(shí)現(xiàn)上述目的,本技術(shù)還提出一種存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)為計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上文所述的異步消息處理方法的步驟。
51、此外,為實(shí)現(xiàn)上述目的,本技術(shù)還提供一種計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上文所述的異步消息處理方法的步驟。
52、本技術(shù)提出的一個(gè)或多個(gè)技術(shù)方案,至少具有以下技術(shù)效果:
53、消息中間件通過接收第一業(yè)務(wù)系統(tǒng)發(fā)送的異步消息和本地異步記錄;處理所述異步消息,根據(jù)處理結(jié)果更新所述本地異步記錄并返回所述第一業(yè)務(wù)系統(tǒng),此時(shí)第一業(yè)務(wù)系統(tǒng)的本地異步記錄得到更新,本地異步記錄可分別存儲(chǔ)在第一業(yè)務(wù)系統(tǒng)和消息中間件的數(shù)據(jù)庫中;掃描所述本地異步記錄,判斷是否存在超時(shí)未處理或失敗記錄;若存在超時(shí)未處理或失敗記錄,判斷消息中間件是否可用;若所述消息中間件可用,則發(fā)起異步消息重試,否則申請(qǐng)第二業(yè)務(wù)系統(tǒng)異步線程。解決不同業(yè)務(wù)場(chǎng)景下消息中間件常見的消息失敗、丟失及冪等重試機(jī)制,缺乏通用異步重試機(jī)制和異構(gòu)降級(jí)機(jī)制的技術(shù)問題,采用異步消息唯一標(biāo)識(shí)方式進(jìn)行異步調(diào)度控制,實(shí)現(xiàn)消息可靠傳遞、唯一消費(fèi)和冪等消費(fèi),構(gòu)建通用的超時(shí)和失敗重試機(jī)制,支持個(gè)性化配置參數(shù)以適用多種應(yīng)用場(chǎng)景,在消息中間件異常時(shí)提供本地線程池的降級(jí)方案。