本發(fā)明涉及計(jì)算機(jī)通信技術(shù)領(lǐng)域,具體涉及一種懸掛事務(wù)自動處理的方法和裝置。
背景技術(shù):
分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。分布式事務(wù)的成員包括發(fā)起者、協(xié)調(diào)者和參與者。其中,發(fā)起者是分布式事務(wù)的發(fā)起方,一次分布式事務(wù)請求只有一個(gè)發(fā)起者。協(xié)調(diào)者是分布式事務(wù)的總控,負(fù)責(zé)分布式事務(wù)生命周期管理和所有分支的管理,一次分布式事務(wù)請求只有一個(gè)協(xié)調(diào)者。參與者是分布式事務(wù)當(dāng)中的分支事務(wù)的控制者,一次分布式事務(wù)請求可以用多個(gè)分支事務(wù)實(shí)現(xiàn),因此可以有多個(gè)參與者。
分布式事務(wù)處理過程中,往往會有多個(gè)參與者發(fā)起的多個(gè)分支事務(wù),且這些分支事務(wù)處于不同的網(wǎng)絡(luò)環(huán)境和服務(wù)器集群,由于分布式事務(wù)的環(huán)境復(fù)雜性,常常導(dǎo)致產(chǎn)生懸掛事務(wù)?,F(xiàn)有技術(shù)在懸掛事務(wù)產(chǎn)生后,只有在收到業(yè)務(wù)沒有成功的反饋,或進(jìn)行日切(就是更換系統(tǒng)記賬的時(shí)間,也稱為日志切換)操作時(shí),才會發(fā)現(xiàn)產(chǎn)生了懸掛事務(wù),對懸掛事務(wù)進(jìn)行人工處理。
現(xiàn)有技術(shù)無法及時(shí)發(fā)現(xiàn)并處理懸掛事務(wù),導(dǎo)致后續(xù)業(yè)務(wù)請求的重試失敗或者資金損失,同時(shí)對于某些業(yè)務(wù)系統(tǒng)(如賬務(wù)),會影響該系統(tǒng)日終結(jié)算等。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問題,本發(fā)明提供了一種懸掛事務(wù)自動處理的方法和裝置,可以及時(shí)發(fā)現(xiàn)并處理懸掛事務(wù),可以避免后續(xù)業(yè)務(wù)請求的重試失敗 和資金損失,同時(shí)對于某些業(yè)務(wù)系統(tǒng)(如賬務(wù)),避免影響該系統(tǒng)日終結(jié)算等。
為了解決上述問題,本發(fā)明公開了一種懸掛事務(wù)自動處理的方法,所述方法包括:
當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表;其中,所述參與者事務(wù)記錄表中記載有參與者執(zhí)行的事務(wù)的id、所述事務(wù)的狀態(tài)、所述事務(wù)的創(chuàng)建時(shí)間;
根據(jù)所述參與者事務(wù)記錄表中記載的所述事務(wù)的狀態(tài)、所述事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定所述事務(wù)是否屬于懸掛事務(wù);
當(dāng)確定所述事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)所述事務(wù)的id,查詢所述事務(wù)的業(yè)務(wù)處理日志;
根據(jù)所述事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對所述事務(wù)進(jìn)行懸掛處理。
進(jìn)一步地,根據(jù)所述參與者事務(wù)記錄表中記載的所述事務(wù)的狀態(tài)、所述事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定所述事務(wù)是否屬于懸掛事務(wù),包括:
判斷所述參與者事務(wù)記錄表中記載的所述事務(wù)的狀態(tài)是否為正在執(zhí)行;
如果所述事務(wù)的狀態(tài)為正在執(zhí)行,則計(jì)算所述當(dāng)前時(shí)間與所述事務(wù)的創(chuàng)建時(shí)間的間隔;
判斷所述當(dāng)前時(shí)間與所述事務(wù)的創(chuàng)建時(shí)間的間隔是否大于預(yù)設(shè)懸掛時(shí)間間隔閾值;
如果所述當(dāng)前時(shí)間與所述事務(wù)的創(chuàng)建時(shí)間的間隔大于所述預(yù)設(shè)懸掛時(shí)間間隔閾值,則確定所述事務(wù)屬于懸掛事務(wù)。
進(jìn)一步地,當(dāng)確定所述事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)所述事務(wù)的id,查詢所述事務(wù)的業(yè)務(wù)處理日志,包括:
當(dāng)確定所述事務(wù)屬于懸掛事務(wù)時(shí),在所述參與者事務(wù)記錄表中標(biāo)記所述事務(wù)的屬性為懸掛事務(wù);
當(dāng)預(yù)設(shè)懸掛定時(shí)處理時(shí)間到達(dá)時(shí),獲取所述參與者事務(wù)記錄表中屬性為 懸掛事務(wù)的所述事務(wù)的id;
根據(jù)屬性為懸掛事務(wù)的所述事務(wù)的id,查詢所述事務(wù)的業(yè)務(wù)處理日志。
進(jìn)一步地,根據(jù)所述事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對所述事務(wù)進(jìn)行懸掛處理,包括:
判斷所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的多少個(gè)階段的日志;
如果所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則對所述事務(wù)進(jìn)行回滾;
如果所述事務(wù)的業(yè)務(wù)處理日志中只包含所述事務(wù)的第一處理階段一個(gè)階段的日志,則根據(jù)所述事務(wù)的id,查詢所述事務(wù)的調(diào)用日志,從所述事務(wù)的調(diào)用日志中獲取所述參與者的上游系統(tǒng)信息,通過所述上游系統(tǒng)信息對應(yīng)的上游系統(tǒng)對所述事務(wù)進(jìn)行懸掛處理。
進(jìn)一步地,通過所述上游系統(tǒng)信息對應(yīng)的上游系統(tǒng)對所述事務(wù)進(jìn)行懸掛處理,包括:
根據(jù)所述事務(wù)的id,獲取所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志;
判斷所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的多少個(gè)階段的日志;
如果所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則請求所述上游系統(tǒng)對所述事務(wù)進(jìn)行回滾;
如果所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的第一處理階段一個(gè)階段的日志,則判定無法確定所述事務(wù)的懸掛原因。
為了解決上述問題,本發(fā)明還公開了一種懸掛事務(wù)自動處理的裝置,所述裝置包括:
第一查詢模塊,用于當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表;其中,所述參與者事務(wù)記錄表中記載有參與者執(zhí)行的事務(wù)的id、所述事務(wù)的狀態(tài)、所述事務(wù)的創(chuàng)建時(shí)間;
確定模塊,用于根據(jù)所述參與者事務(wù)記錄表中記載的所述事務(wù)的狀態(tài)、 所述事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定所述事務(wù)是否屬于懸掛事務(wù);
第二查詢模塊,用于當(dāng)確定所述事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)所述事務(wù)的id,查詢所述事務(wù)的業(yè)務(wù)處理日志;
處理模塊,用于根據(jù)所述事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對所述事務(wù)進(jìn)行懸掛處理。
進(jìn)一步地,所述確定模塊包括:
第一判斷單元,用于判斷所述參與者事務(wù)記錄表中記載的所述事務(wù)的狀態(tài)是否為正在執(zhí)行;
計(jì)算單元,用于如果所述事務(wù)的狀態(tài)為正在執(zhí)行,則計(jì)算所述當(dāng)前時(shí)間與所述事務(wù)的創(chuàng)建時(shí)間的間隔;
第二判斷單元,用于判斷所述當(dāng)前時(shí)間與所述事務(wù)的創(chuàng)建時(shí)間的間隔是否大于預(yù)設(shè)懸掛時(shí)間間隔閾值;
確定單元,用于如果所述當(dāng)前時(shí)間與所述事務(wù)的創(chuàng)建時(shí)間的間隔大于所述預(yù)設(shè)懸掛時(shí)間間隔閾值,則確定所述事務(wù)屬于懸掛事務(wù)。
進(jìn)一步地,所述第二查詢模塊包括:
標(biāo)記單元,用于當(dāng)確定所述事務(wù)屬于懸掛事務(wù)時(shí),在所述參與者事務(wù)記錄表中標(biāo)記所述事務(wù)的屬性為懸掛事務(wù);
獲取單元,用于當(dāng)預(yù)設(shè)懸掛定時(shí)處理時(shí)間到達(dá)時(shí),獲取所述參與者事務(wù)記錄表中屬性為懸掛事務(wù)的所述事務(wù)的id;
查詢單元,用于根據(jù)屬性為懸掛事務(wù)的所述事務(wù)的id,查詢所述事務(wù)的業(yè)務(wù)處理日志。
進(jìn)一步地,所述處理模塊包括:
第三判斷單元,用于判斷所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的多少個(gè)階段的日志;
回滾單元,用于如果所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則對所述事務(wù)進(jìn)行回滾;
處理單元,用于如果所述事務(wù)的業(yè)務(wù)處理日志中只包含所述事務(wù)的第一 處理階段一個(gè)階段的日志,則根據(jù)所述事務(wù)的id,查詢所述事務(wù)的調(diào)用日志,從所述事務(wù)的調(diào)用日志中獲取所述參與者的上游系統(tǒng)信息,通過所述上游系統(tǒng)信息對應(yīng)的上游系統(tǒng)對所述事務(wù)進(jìn)行懸掛處理。
進(jìn)一步地,所述處理單元包括:
獲取子單元,用于根據(jù)所述事務(wù)的id,獲取所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志;
判斷子單元,用于判斷所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的多少個(gè)階段的日志;
回滾子單元,用于如果所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則請求所述上游系統(tǒng)對所述事務(wù)進(jìn)行回滾;
判定子單元,用于如果所述上游系統(tǒng)中所述事務(wù)的業(yè)務(wù)處理日志中包含所述事務(wù)的第一處理階段一個(gè)階段的日志,則判定無法確定所述事務(wù)的懸掛原因。
與現(xiàn)有技術(shù)相比,本發(fā)明可以獲得包括以下技術(shù)效果:
1)當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表,根據(jù)參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定事務(wù)是否屬于懸掛事務(wù),當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志,根據(jù)事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對事務(wù)進(jìn)行懸掛處理,可以及時(shí)發(fā)現(xiàn)并處理懸掛事務(wù),可以避免后續(xù)業(yè)務(wù)請求的重試失敗和資金損失,同時(shí)對于某些業(yè)務(wù)系統(tǒng)(如賬務(wù)),避免影響該系統(tǒng)日終結(jié)算等。
2)通過配置懸掛定時(shí)查詢時(shí)間、懸掛定時(shí)處理時(shí)間方式,可以自動發(fā)現(xiàn)懸掛事務(wù)并自動解決,可以盡快消除業(yè)務(wù)重試失敗風(fēng)險(xiǎn)和資金風(fēng)險(xiǎn)。
當(dāng)然,實(shí)施本發(fā)明的任一產(chǎn)品必不一定需要同時(shí)達(dá)到以上所述的所有技術(shù)效果。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1是本發(fā)明實(shí)施例的第一種懸掛事務(wù)自動處理的方法流程圖;
圖2是本發(fā)明實(shí)施例的一種分布式事務(wù)的處理示意圖;
圖3是本發(fā)明實(shí)施例的第二種懸掛事務(wù)自動處理的方法流程圖;
圖4是本發(fā)明實(shí)施例的第三種懸掛事務(wù)自動處理的方法流程圖;
圖5是本發(fā)明實(shí)施例的第四種懸掛事務(wù)自動處理的方法流程圖;
圖6是本發(fā)明實(shí)施例的一種懸掛事務(wù)自動處理的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下將配合附圖及實(shí)施例來詳細(xì)說明本發(fā)明的實(shí)施方式,藉此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達(dá)成技術(shù)功效的實(shí)現(xiàn)過程能充分理解并據(jù)以實(shí)施。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電 腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同名詞來稱呼同一個(gè)組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包含”為一開放式用語,故應(yīng)解釋成“包含但不限定于”。“大致”是指在可接收的誤差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題,基本達(dá)到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實(shí)施本發(fā)明的較佳實(shí)施方式,然所述描述乃以說明本發(fā)明的一般原則為目的,并非用以限定本發(fā)明的范圍。本發(fā)明的保護(hù)范圍當(dāng)視所附權(quán)利要求所界定者為準(zhǔn)。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的商品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種商品或者系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的商品或者系統(tǒng)中還存在另外的相同要素。
實(shí)施例描述
下面以一實(shí)施例對本發(fā)明方法的實(shí)現(xiàn)作進(jìn)一步說明。如圖1所示,為本發(fā)明實(shí)施例的一種懸掛事務(wù)自動處理的方法流程圖,該方法包括:
s101:當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表。
其中,參與者事務(wù)記錄表中記載有參與者執(zhí)行的事務(wù)的id(身份標(biāo)識)、事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間等。事務(wù)的狀態(tài)包括正在執(zhí)行、第一處理階段完結(jié)、第二處理階段完結(jié)等。
需要說明的是,分布式事務(wù)處理過程中一般包括二個(gè)階段,第一處理階段和第二處理階段,第一處理階段進(jìn)行事務(wù)的發(fā)起,第二處理階段進(jìn)行事務(wù) 的提交或回滾等。
例如:分布式事務(wù)的參與者a的參與者事務(wù)記錄表中記載有:事務(wù)的id:123、事務(wù)的狀態(tài):正在執(zhí)行、事務(wù)的創(chuàng)建時(shí)間:2016-2-20-13:12、事務(wù)的內(nèi)容:租場地。
具體地,可以配置懸掛事務(wù)定時(shí)查詢?nèi)蝿?wù),當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),進(jìn)行懸掛事務(wù)查詢,確定是否產(chǎn)生了懸掛事務(wù)。預(yù)設(shè)懸掛定時(shí)查詢時(shí)間可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,如可以設(shè)置為30分鐘、1小時(shí)等。每隔一預(yù)設(shè)懸掛定時(shí)查詢時(shí)間,查詢一下是否產(chǎn)生了懸掛事務(wù)。
s102:根據(jù)參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定事務(wù)是否屬于懸掛事務(wù)。
具體地,確定事務(wù)是否屬于懸掛事務(wù),即確定事務(wù)是否發(fā)生了懸掛,產(chǎn)生了懸掛事務(wù)。
具體地,參見圖2,為常見分布式事務(wù)的處理流程(其中,參與者可以包括多個(gè)),在流程的第3步如果網(wǎng)絡(luò)超時(shí),此時(shí)發(fā)起者會收到協(xié)調(diào)者添加分支事務(wù)失敗的結(jié)果,從而發(fā)起回滾,此時(shí)在第二處理階段協(xié)調(diào)者收到的回滾請求,因?yàn)榈?步超時(shí),分支事務(wù)記錄沒有成功落地,所以空回滾,而此時(shí)待第3步請求真正處理完成時(shí),整個(gè)事務(wù)已經(jīng)回滾成功,本次分布式事務(wù)請求結(jié)束,第4步實(shí)際落地的分支事務(wù)記錄,將一直留在協(xié)調(diào)者中,而不會被現(xiàn)有分布式事務(wù)處理,產(chǎn)生懸掛事務(wù)。在流程的第5步如果網(wǎng)絡(luò)超時(shí),此時(shí)發(fā)起者會收到參與者添加分支事務(wù)失敗的結(jié)果,從而發(fā)起回滾,此時(shí)在第二處理階段參與者收到的回滾請求,因?yàn)榈?步超時(shí),預(yù)處理記錄沒入成功落地,所以空回滾,而此時(shí)待第5步請求真正處理完成時(shí),整個(gè)事務(wù)已經(jīng)回滾成功,第6步實(shí)際落地的預(yù)處理記錄,將一直留在參與者中,而不會被現(xiàn)有分布式事務(wù)處理,產(chǎn)生懸掛事務(wù)。
從上面描述可以看出懸掛事務(wù)產(chǎn)生的一種情況為:由于網(wǎng)絡(luò)超時(shí),可能導(dǎo)致第二處理階段的請求會在預(yù)處理落地之前就到達(dá),而第二處理階段請求處理時(shí)由于第一處理階段的數(shù)據(jù)還沒落地,所以兩階段回滾會空回滾,在分布式事務(wù)結(jié)束后,結(jié)束的分布式事務(wù)將不在發(fā)起第二階段請求,從而產(chǎn)生懸掛事務(wù)。
懸掛事務(wù)產(chǎn)生的另一種情況為:在第一處理階段完成后,發(fā)起者由于代碼bug(漏洞)導(dǎo)致沒有發(fā)起第二處理階段,從而產(chǎn)生懸掛事務(wù)。
s103:當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志。
具體地,業(yè)務(wù)處理日志按照對應(yīng)的事務(wù)的id存儲在參與者服務(wù)器的預(yù)設(shè)存儲空間。在事務(wù)處理過程,產(chǎn)生業(yè)務(wù)處理日志時(shí),參與者服務(wù)器會進(jìn)行雙寫,以保證業(yè)務(wù)處理日志的持久性。
s104:根據(jù)事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對事務(wù)進(jìn)行懸掛處理。
具體地,根據(jù)s102中懸掛事務(wù)產(chǎn)生的情況,預(yù)先設(shè)置相應(yīng)的懸掛事務(wù)處理規(guī)則,當(dāng)確定事務(wù)屬于懸掛事務(wù)后,根據(jù)事務(wù)的業(yè)務(wù)處理日志確定懸掛事務(wù)屬于哪一種情況,然后根據(jù)該種情況的懸掛事務(wù)的處理規(guī)則,對事務(wù)進(jìn)行懸掛處理。
具體地,在本發(fā)明實(shí)施例的一優(yōu)選實(shí)施例中,參見圖3,s102根據(jù)參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定事務(wù)是否屬于懸掛事務(wù),包括:
s102a:判斷參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)是否為正在執(zhí)行,如果事務(wù)的狀態(tài)為正在執(zhí)行,則執(zhí)行s102b;否則,執(zhí)行s102e。
s102b:計(jì)算當(dāng)前時(shí)間與事務(wù)的創(chuàng)建時(shí)間的間隔。
s102c:判斷當(dāng)前時(shí)間與事務(wù)的創(chuàng)建時(shí)間的間隔是否大于預(yù)設(shè)懸掛時(shí)間間隔閾值,如果當(dāng)前時(shí)間與事務(wù)的創(chuàng)建時(shí)間的間隔大于預(yù)設(shè)懸掛時(shí)間間隔閾值,則執(zhí)行s102d;否則,執(zhí)行s102e。
其中,預(yù)設(shè)懸掛時(shí)間間隔閾值可以根據(jù)實(shí)際應(yīng)用狀況進(jìn)行設(shè)置,如對于一個(gè)業(yè)務(wù)系統(tǒng)來說通常會有超時(shí)時(shí)間,一般超時(shí)時(shí)間為30s,可以考慮設(shè)置預(yù)設(shè)懸掛時(shí)間間隔閾值大于超時(shí)時(shí)間,如可以設(shè)置為2分鐘等,如果事務(wù)處于正在執(zhí)行狀態(tài),同時(shí)處理時(shí)間已經(jīng)遠(yuǎn)超過了超時(shí)時(shí)間,此類情況下正常都會超時(shí)回滾掉,對于此情況的事務(wù)可確定屬于懸掛事務(wù)。
s102d:確定事務(wù)屬于懸掛事務(wù),然后結(jié)束。
s102e:確定事務(wù)不屬于懸掛事務(wù),然后結(jié)束。
具體地,在本發(fā)明實(shí)施例的一優(yōu)選實(shí)施例中,參見圖4,s103當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志,包括:
s103a:當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),在參與者事務(wù)記錄表中標(biāo)記事務(wù)的屬性為懸掛事務(wù)。
具體地,在參與者事務(wù)記錄表中標(biāo)記事務(wù)的屬性為懸掛事務(wù),通過標(biāo)記使得后續(xù)可以方便地查詢得到事務(wù)是否屬于懸掛事務(wù)。標(biāo)記事務(wù)的屬性為懸掛事務(wù)時(shí),可以通過標(biāo)識等方法實(shí)現(xiàn),如可以通過標(biāo)識11表示事務(wù)是懸掛事務(wù),通過標(biāo)識00表示事務(wù)不是懸掛事務(wù)等。
s103b:當(dāng)預(yù)設(shè)懸掛定時(shí)處理時(shí)間到達(dá)時(shí),獲取參與者事務(wù)記錄表中屬性為懸掛事務(wù)的事務(wù)的id。
具體地,可以配置懸掛事務(wù)定時(shí)處理任務(wù),可以考慮跟懸掛事務(wù)定時(shí)查詢?nèi)蝿?wù)的頻率相同,可以在懸掛事務(wù)定時(shí)查詢?nèi)蝿?wù)完結(jié)后的預(yù)設(shè)時(shí)間(如5秒后,2分鐘后)啟動。
s103c:根據(jù)屬性為懸掛事務(wù)的事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志。
具體地,在本發(fā)明實(shí)施例的一優(yōu)選實(shí)施例中,參見圖5,s104根據(jù)事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對事務(wù)進(jìn)行懸掛處理,包括:
s104a:判斷事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的多少個(gè)階段的日志,如果事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則執(zhí)行s104b;如果事務(wù)的業(yè)務(wù)處理日志中只包含事務(wù)的第一處理階段一個(gè)階段的日志,則執(zhí)行s103c。
s104b:對事務(wù)進(jìn)行回滾,然后結(jié)束。
具體地,對事務(wù)進(jìn)行回滾,處理完成后,更新事務(wù)的屬性為非懸掛事務(wù)。
s104c:根據(jù)事務(wù)的id,查詢事務(wù)的調(diào)用日志,從事務(wù)的調(diào)用日志中獲取參與者的上游系統(tǒng)信息,通過上游系統(tǒng)信息對應(yīng)的上游系統(tǒng)對事務(wù)進(jìn)行懸掛處理,然后結(jié)束。
其中,上游系統(tǒng)可能是參與者的上游參與者、協(xié)調(diào)者、或發(fā)起者。
具體地,在本發(fā)明實(shí)施例的一優(yōu)選實(shí)施例中,參見圖6,s104c中的通過上游系統(tǒng)信息對應(yīng)的上游系統(tǒng)對事務(wù)進(jìn)行懸掛處理,包括:
s104c1:根據(jù)事務(wù)的id,獲取上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志。
s104c2:判斷上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的多少個(gè)階段的日志,如果上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則執(zhí)行s104c3;如果上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的第一處理階段一個(gè)階段的日志,則執(zhí)行s104c4。
s104c3:請求上游系統(tǒng)對事務(wù)進(jìn)行回滾,然后結(jié)束。
具體地,請求上游系統(tǒng)對事務(wù)進(jìn)行回滾,上游系統(tǒng)對事務(wù)進(jìn)行回滾,處理完成后,更新事務(wù)的屬性為非懸掛事務(wù)。
s104c4:判定無法確定事務(wù)的懸掛原因,然后結(jié)束。
具體地,對事務(wù)進(jìn)行回滾,處理完成后,或在判定無法確定事務(wù)的懸掛原因后,可以通過發(fā)送短信、郵件等形式將處理結(jié)果通知指定用戶(如檢測系統(tǒng)&調(diào)用系統(tǒng)技術(shù)人員等),便于后續(xù)處理。
本實(shí)施例所述的懸掛事務(wù)自動處理的方法,當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表,根據(jù)參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定事務(wù)是否屬于懸掛事務(wù),當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志,根據(jù)事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對事務(wù)進(jìn)行懸掛處理,可以及時(shí)發(fā)現(xiàn)并處理懸掛事務(wù),可以避免后續(xù)業(yè)務(wù)請求的重試失敗和資金損失,同時(shí)對于某些業(yè)務(wù)系統(tǒng)(如賬務(wù)),避免影響該系統(tǒng)日終結(jié)算等。通過配置懸掛定時(shí)查詢時(shí)間、懸掛定時(shí)處理時(shí)間方式,可以自動發(fā)現(xiàn)懸掛事務(wù)并自動解決,可以盡快消除業(yè)務(wù)重試失敗風(fēng)險(xiǎn)和資金風(fēng)險(xiǎn)。
如圖6所示,是本發(fā)明實(shí)施例的一種懸掛事務(wù)自動處理的裝置結(jié)構(gòu)圖,該裝置包括:
第一查詢模塊201,用于當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表;其中,參與者事務(wù)記錄表中記載有參與者執(zhí)行的事務(wù)的id、事 務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間;
確定模塊202,用于根據(jù)參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定事務(wù)是否屬于懸掛事務(wù);
第二查詢模塊203,用于當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志;
處理模塊204,用于根據(jù)事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對事務(wù)進(jìn)行懸掛處理。
進(jìn)一步地,確定模塊202包括:
第一判斷單元,用于判斷參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)是否為正在執(zhí)行;
計(jì)算單元,用于如果事務(wù)的狀態(tài)為正在執(zhí)行,則計(jì)算當(dāng)前時(shí)間與事務(wù)的創(chuàng)建時(shí)間的間隔;
第二判斷單元,用于判斷當(dāng)前時(shí)間與事務(wù)的創(chuàng)建時(shí)間的間隔是否大于預(yù)設(shè)懸掛時(shí)間間隔閾值;
確定單元,用于如果當(dāng)前時(shí)間與事務(wù)的創(chuàng)建時(shí)間的間隔大于預(yù)設(shè)懸掛時(shí)間間隔閾值,則確定事務(wù)屬于懸掛事務(wù)。
進(jìn)一步地,第二查詢模塊203包括:
標(biāo)記單元,用于當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),在參與者事務(wù)記錄表中標(biāo)記事務(wù)的屬性為懸掛事務(wù);
獲取單元,用于當(dāng)預(yù)設(shè)懸掛定時(shí)處理時(shí)間到達(dá)時(shí),獲取參與者事務(wù)記錄表中屬性為懸掛事務(wù)的事務(wù)的id;
查詢單元,用于根據(jù)屬性為懸掛事務(wù)的事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志。
進(jìn)一步地,處理模塊204包括:
第三判斷單元,用于判斷事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的多少個(gè)階段的日志;
回滾單元,用于如果事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的第一處理階段和 第二處理階段二個(gè)階段的日志,則對事務(wù)進(jìn)行回滾;
處理單元,用于如果事務(wù)的業(yè)務(wù)處理日志中只包含事務(wù)的第一處理階段一個(gè)階段的日志,則根據(jù)事務(wù)的id,查詢事務(wù)的調(diào)用日志,從事務(wù)的調(diào)用日志中獲取參與者的上游系統(tǒng)信息,通過上游系統(tǒng)信息對應(yīng)的上游系統(tǒng)對事務(wù)進(jìn)行懸掛處理。
進(jìn)一步地,處理單元包括:
獲取子單元,用于根據(jù)事務(wù)的id,獲取上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志;
判斷子單元,用于判斷上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的多少個(gè)階段的日志;
回滾子單元,用于如果上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的第一處理階段和第二處理階段二個(gè)階段的日志,則請求上游系統(tǒng)對事務(wù)進(jìn)行回滾;
判定子單元,用于如果上游系統(tǒng)中事務(wù)的業(yè)務(wù)處理日志中包含事務(wù)的第一處理階段一個(gè)階段的日志,則判定無法確定事務(wù)的懸掛原因。
本實(shí)施例所述的懸掛事務(wù)自動處理的裝置,當(dāng)預(yù)設(shè)懸掛定時(shí)查詢時(shí)間到達(dá)時(shí),查詢參與者事務(wù)記錄表,根據(jù)參與者事務(wù)記錄表中記載的事務(wù)的狀態(tài)、事務(wù)的創(chuàng)建時(shí)間,以及當(dāng)前時(shí)間,確定事務(wù)是否屬于懸掛事務(wù),當(dāng)確定事務(wù)屬于懸掛事務(wù)時(shí),根據(jù)事務(wù)的id,查詢事務(wù)的業(yè)務(wù)處理日志,根據(jù)事務(wù)的業(yè)務(wù)處理日志,按照預(yù)設(shè)懸掛事務(wù)處理規(guī)則,對事務(wù)進(jìn)行懸掛處理,可以及時(shí)發(fā)現(xiàn)并處理懸掛事務(wù),可以避免后續(xù)業(yè)務(wù)請求的重試失敗和資金損失,同時(shí)對于某些業(yè)務(wù)系統(tǒng)(如賬務(wù)),避免影響該系統(tǒng)日終結(jié)算等。通過配置懸掛定時(shí)查詢時(shí)間、懸掛定時(shí)處理時(shí)間方式,可以自動發(fā)現(xiàn)懸掛事務(wù)并自動解決,可以盡快消除業(yè)務(wù)重試失敗風(fēng)險(xiǎn)和資金風(fēng)險(xiǎn)。
所述裝置與前述的方法流程描述對應(yīng),不足之處參考上述方法流程的敘述,不再一一贅述。
上述說明示出并描述了本發(fā)明的若干優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi), 通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進(jìn)行改動。而本領(lǐng)域人員所進(jìn)行的改動和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護(hù)范圍內(nèi)。