本發(fā)明涉及微服務(wù)領(lǐng)域,具體而言,涉及一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法、裝置及系統(tǒng)。
背景技術(shù):
目前,在互聯(lián)網(wǎng)開發(fā)的環(huán)境下,統(tǒng)一的大應(yīng)用系統(tǒng)已經(jīng)不能滿足日益增長的擴(kuò)展性需求。為了提高系統(tǒng)的運(yùn)行速度,以及支持靈活的動態(tài)擴(kuò)展,業(yè)務(wù)系統(tǒng)一般會被拆分為多個微服務(wù),即每個服務(wù)僅提供相對獨(dú)立的部分功能,實(shí)現(xiàn)通過部署新的服務(wù)方式進(jìn)行系統(tǒng)的功能擴(kuò)展,同時在系統(tǒng)的壓力過大時,可以更精確地?cái)U(kuò)展需要增加的服務(wù),避免其它服務(wù)占用不必要的系統(tǒng)資源。
一次業(yè)務(wù)服務(wù)的調(diào)用過程,可能會經(jīng)過多個應(yīng)用系統(tǒng),而原有單個應(yīng)用系統(tǒng)在運(yùn)行時,不同應(yīng)用模塊間是通過數(shù)據(jù)庫保證事務(wù)的一致性,即同時修改成功,一旦失敗后會回滾全部應(yīng)用操作的數(shù)據(jù)。然而,采用微服務(wù)的架構(gòu)方式,無法再依賴數(shù)據(jù)庫實(shí)現(xiàn)事務(wù)的一致性,存在各個應(yīng)用系統(tǒng)間的調(diào)用問題。
在微服務(wù)架構(gòu)下,應(yīng)用系統(tǒng)通過服務(wù)接口調(diào)用的方式訪問其他應(yīng)用。具體地說,在服務(wù)調(diào)用的方式下,從A應(yīng)用發(fā)起一次業(yè)務(wù)請求,可能需要調(diào)用B應(yīng)用、C應(yīng)用等多個應(yīng)用的服務(wù),為了保證事務(wù)的一致性,如果調(diào)用C應(yīng)用失敗,B應(yīng)用系統(tǒng)的數(shù)據(jù)無法回滾而產(chǎn)生錯誤,這時可以通過A應(yīng)用的業(yè)務(wù)邏輯在此調(diào)用B應(yīng)用的方向服務(wù),但是,會帶來兩個問題:一方面,導(dǎo)致業(yè)務(wù)邏輯的復(fù)雜度高,容易出現(xiàn)錯誤;另一方面,如果A應(yīng)用、B應(yīng)用或者C應(yīng)用出現(xiàn)宕機(jī)時,可能導(dǎo)致數(shù)據(jù)無法回滾,最終無法保證數(shù)據(jù)的一致性。
在微服務(wù)架構(gòu)下,各應(yīng)用系統(tǒng)間的業(yè)務(wù)相對獨(dú)立,即業(yè)務(wù)的數(shù)據(jù)也相 對獨(dú)立,因此,不需要保證數(shù)據(jù)的實(shí)時一致性,只要保證數(shù)據(jù)的最終一致性即可,具體地說,當(dāng)A系統(tǒng)調(diào)用B系統(tǒng)服務(wù)時,可以先完成A系統(tǒng)的數(shù)據(jù)持久化,B系統(tǒng)可以異步修改自己的數(shù)據(jù),如果出現(xiàn)錯誤時,根據(jù)錯誤產(chǎn)生的原因重新執(zhí)行B系統(tǒng)業(yè)務(wù)動作,或者調(diào)用A系統(tǒng)的反向操作,回退A系統(tǒng)的數(shù)據(jù),實(shí)現(xiàn)A系統(tǒng)、B系統(tǒng)間的數(shù)據(jù)的最終一致性,同時不會影響A系統(tǒng)的執(zhí)行速度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明旨在至少解決現(xiàn)有技術(shù)或相關(guān)技術(shù)中存在的技術(shù)問題之一。
為此,本發(fā)明的一個目的在于提出了一種用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法。
本發(fā)明的另一個目的在于提出了一種用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法。
本發(fā)明的又一個目的在于提出了一種用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法。
本發(fā)明的又一個目的在于提出了一種用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置。
本發(fā)明的又一個目的在于提出了一種用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置。
本發(fā)明的又一個目的在于提出了一種用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置。
本發(fā)明的再一個目的在于提出了一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)。
有鑒于此,本發(fā)明提出了一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,用于發(fā)送端,發(fā)送端通過消息隊(duì)列服務(wù)與接收端進(jìn)行交互,包括:步驟102,發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;步驟104,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,判斷調(diào)用請求是否成功發(fā)送;在調(diào)用請求成功發(fā)送時,進(jìn)行步驟106,以調(diào)用消息隊(duì)列服務(wù);步驟106,接 收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,根?jù)日志狀態(tài)判斷調(diào)用處理是否完成,若調(diào)用處理完成,進(jìn)行步驟108;以及若調(diào)用為處理中,進(jìn)行步驟110;步驟108,不作處理;步驟110,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,返回步驟102。
本發(fā)明提供的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,通過發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,判斷調(diào)用請求是否成功發(fā)送,在調(diào)用請求成功發(fā)送時,以調(diào)用消息隊(duì)列服務(wù),通過日志以及消息隊(duì)列對服務(wù)進(jìn)行異步數(shù)據(jù)調(diào)用,保證服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗洠M(jìn)而根據(jù)日志狀態(tài)確定當(dāng)前調(diào)用處理的情況,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,保證了調(diào)用結(jié)果處理的可靠性。若日志狀態(tài)表明調(diào)用處理完成,不作處理,若日志狀態(tài)表明調(diào)用仍在處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,進(jìn)行后續(xù)處理,繼續(xù)發(fā)起服務(wù)調(diào)用。
根據(jù)本發(fā)明上述的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,還可以具有如下附加的技術(shù)特征:
在上述技術(shù)方案中,優(yōu)選地,還包括:步驟112,在調(diào)用請求未成功發(fā)送時,返回步驟102。
在該技術(shù)方案中,在調(diào)用請求未成功發(fā)送時,通過重新發(fā)起服務(wù)調(diào)用,以支持發(fā)生錯誤時的重新處理,再通過記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并等待重新發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),使得服務(wù)調(diào)用更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證業(yè)務(wù)調(diào)用一定被執(zhí)行,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
在上述技術(shù)方案中,優(yōu)選地,步驟102,具體包括:業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,攔截調(diào)用遠(yuǎn)程服務(wù)接口;生成全局唯一的事務(wù)ID,并記錄事務(wù)ID;實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并記錄日志的調(diào)用 狀態(tài)為未調(diào)用。
在該技術(shù)方案中,業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,通過攔截調(diào)用遠(yuǎn)程服務(wù)接口,生成全局唯一的事務(wù)ID,并記錄事務(wù)ID,保證不同的應(yīng)用系統(tǒng)生成不同的ID,以及相同的應(yīng)用系統(tǒng)在每次服務(wù)調(diào)用時生成的ID不重復(fù)。進(jìn)一步地,通過實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并記錄日志的調(diào)用狀態(tài)為未調(diào)用,實(shí)現(xiàn)通過事務(wù)ID查詢?nèi)罩居涗?,就可以查詢到調(diào)用狀態(tài)為未調(diào)用的日志,查詢速度快,進(jìn)而可以快速判斷日志狀態(tài),使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
在上述技術(shù)方案中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該技術(shù)方案中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過各種不同的日志數(shù)據(jù),實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速根據(jù)日志狀態(tài)判斷調(diào)用處理是否完成,使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解日志的相關(guān)調(diào)用信息,實(shí)現(xiàn)及時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,進(jìn)而調(diào)用消息隊(duì)列服務(wù)。進(jìn)一步地,方便查詢?nèi)罩居涗洠沟没貓?zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,同時進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
本發(fā)明還提出一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,用于消息隊(duì)列服務(wù),發(fā)送端通過消息隊(duì)列服務(wù)與接收端進(jìn)行交互,包括:步驟202,接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列;步驟204,管理消息隊(duì)列,以及監(jiān)聽到執(zhí)行隊(duì)列收到消息后,發(fā)送所述消息;步驟206,接收所述消息,根據(jù)消息查詢?nèi)罩居涗?,判斷消息日志狀態(tài);若消息日志狀態(tài)為處理中或日志不存在,進(jìn)行步驟208;若消息日志狀態(tài)為成功或者失敗,進(jìn)行步驟210;步驟208,根據(jù)消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服 務(wù)是否調(diào)用成功及調(diào)用失敗原因類型;若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,進(jìn)行步驟210;若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,進(jìn)行步驟226;步驟210,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中;
步驟212,監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送回執(zhí)消息;步驟214,接收回執(zhí)消息,發(fā)送給發(fā)送端,并返回處理結(jié)果;步驟216,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,進(jìn)行步驟218;若發(fā)送成功,進(jìn)行步驟224;步驟218,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列;若回執(zhí)隊(duì)列存在下級延時隊(duì)列,進(jìn)行步驟220;若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,進(jìn)行步驟222;步驟220,將消息放入下級延時隊(duì)列,并記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;步驟222,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;步驟224,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
步驟226,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若執(zhí)行隊(duì)列存在下級延時隊(duì)列,進(jìn)行步驟228;若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,返回步驟210;步驟228,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,返回步驟206,同時進(jìn)行步驟230;步驟230,記錄消息日志狀態(tài)為處理中,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫。
本發(fā)明提供的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,通過接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列中,在監(jiān)聽到執(zhí)行隊(duì)列收到消息后發(fā)送消息,接收消息,根據(jù)消息查詢?nèi)罩居涗?,判斷消息日志狀態(tài),根據(jù)不同的消息日志狀態(tài),進(jìn)行不同的處理,避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,實(shí)現(xiàn)有效地管理各應(yīng)用系統(tǒng)之間的消息,通過記錄調(diào)用結(jié)果,以及調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。進(jìn)一步地,根據(jù)處理結(jié)果記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,尤其地,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)收到重復(fù)消息時,判斷業(yè)務(wù)調(diào)用是否已產(chǎn)生結(jié)果,避免重復(fù)調(diào)用。
具體地說,若消息日志狀態(tài)為處理中或日志不存在,根據(jù)消息調(diào)用業(yè) 務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型,若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送回執(zhí)消息,接收回執(zhí)消息,發(fā)送給發(fā)送端,并返回處理結(jié)果,通過將回執(zhí)消息及時發(fā)送給發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。
進(jìn)一步地,若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若執(zhí)行隊(duì)列存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,等待進(jìn)行繼續(xù)處理,同時記錄消息日志狀態(tài)為處理中,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列,若回執(zhí)隊(duì)列存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,等待進(jìn)行繼續(xù)處理,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
進(jìn)一步地,若發(fā)送成功,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,繼續(xù)處理,以及直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
在上述技術(shù)方案中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該技術(shù)方案中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組 合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過記錄的各種不同的日志數(shù)據(jù),可以確定消息日志狀態(tài),實(shí)現(xiàn)避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,完善了消息隊(duì)列服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證消息隊(duì)列服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩居涗?,判斷消息日志狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解消息日志的相關(guān)調(diào)用信息,以調(diào)用消息隊(duì)列服務(wù),保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
本發(fā)明還提出一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,用于接收端,發(fā)送端通過消息隊(duì)列服務(wù)與接收端進(jìn)行交互,包括:步驟302,攔截服務(wù)調(diào)用,查詢?nèi)罩居涗洠徊襟E304,判斷是否存在日志記錄;若不存在日志記錄,進(jìn)行步驟306;若存在日志記錄,進(jìn)行步驟308;步驟306,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;以及步驟308,根據(jù)日志記錄,返回調(diào)用結(jié)果。
本發(fā)明提供的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,通過攔截服務(wù)調(diào)用,查詢?nèi)罩居涗?,根?jù)是否存在日志記錄,進(jìn)行不同的處理,若存在日志記錄,根據(jù)日志記錄,直接返回調(diào)用結(jié)果。進(jìn)一步地,若不存在日志記錄,通過調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,最后根據(jù)日志記錄,返回調(diào)用結(jié)果,保證調(diào)用服務(wù)不會被重復(fù)調(diào)用。
在上述技術(shù)方案中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果。
在該技術(shù)方案中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速判斷是否存在日志記錄,在不存在日志記錄時,通過調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證調(diào)用服務(wù)不會被重復(fù)調(diào)用。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,詳細(xì)了解日志的相關(guān)調(diào)用信息。
本發(fā)明還提出了一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,用于發(fā) 送端,發(fā)送端通過消息隊(duì)列服務(wù)與接收端進(jìn)行交互,包括:日志記錄裝置,用于發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;定時發(fā)送裝置,用于當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,判斷調(diào)用請求是否成功發(fā)送;在調(diào)用請求成功發(fā)送時,以調(diào)用消息隊(duì)列服務(wù);回執(zhí)處理裝置,用于接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,根?jù)日志狀態(tài)判斷調(diào)用處理是否完成,若調(diào)用為處理完成,不作處理;以及還用于若調(diào)用為處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,繼續(xù)發(fā)起服務(wù)調(diào)用。
本發(fā)明提供的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,通過日志記錄裝置,發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過定時發(fā)送裝置,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),通過日志以及消息隊(duì)列對服務(wù)進(jìn)行異步數(shù)據(jù)調(diào)用,保證服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過回執(zhí)處理裝置,接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,進(jìn)而根據(jù)日志狀態(tài)確定當(dāng)前調(diào)用處理的情況,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,保證了調(diào)用結(jié)果處理的可靠性。若日志狀態(tài)表明調(diào)用處理完成,不作處理,若日志狀態(tài)表明調(diào)用仍在處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,進(jìn)行后續(xù)處理,繼續(xù)發(fā)起服務(wù)調(diào)用。
根據(jù)本發(fā)明上述的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,還可以具有如下附加的技術(shù)特征:
在上述技術(shù)方案中,優(yōu)選地,日志記錄裝置,還用于在調(diào)用請求未成功發(fā)送時,重新發(fā)起服務(wù)調(diào)用。
在該技術(shù)方案中,在調(diào)用請求未成功發(fā)送時,通過日志記錄裝置,重新發(fā)起服務(wù)調(diào)用,以支持發(fā)生錯誤時的重新處理,再通過記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并等待重新發(fā)送調(diào)用請求,以調(diào)用消息隊(duì) 列服務(wù),使得服務(wù)調(diào)用更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證業(yè)務(wù)調(diào)用一定被執(zhí)行,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
在上述技術(shù)方案中,優(yōu)選地,日志記錄裝置,具體用于:業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,攔截調(diào)用遠(yuǎn)程服務(wù)接口;生成全局唯一的事務(wù)ID,并記錄所述事務(wù)ID;實(shí)時存儲日志數(shù)據(jù),并記錄日志的調(diào)用狀態(tài)為未調(diào)用。
在該技術(shù)方案中,業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,通過日志記錄裝置,攔截調(diào)用遠(yuǎn)程服務(wù)接口,生成全局唯一的事務(wù)ID,并記錄事務(wù)ID,保證不同的應(yīng)用系統(tǒng)生成不同的ID,以及相同的應(yīng)用系統(tǒng)在每次服務(wù)調(diào)用時生成的ID不重復(fù)。進(jìn)一步地,通過實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并記錄日志的調(diào)用狀態(tài)為未調(diào)用,實(shí)現(xiàn)通過事務(wù)ID查詢?nèi)罩居涗?,就可以查詢到調(diào)用狀態(tài)為未調(diào)用的日志,查詢速度快,進(jìn)而可以快速判斷日志狀態(tài),使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
在上述技術(shù)方案中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該技術(shù)方案中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過各種不同的日志數(shù)據(jù),實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速根據(jù)日志狀態(tài)判斷調(diào)用處理是否完成,使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾進(jìn)一步地保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解日志的相關(guān)調(diào)用信息,實(shí)現(xiàn)及時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,進(jìn)而調(diào)用消息隊(duì)列服務(wù),保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,方便查詢?nèi)罩居涗?,使得回?zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,同時進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
本發(fā)明還提出一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,用于消息隊(duì) 列服務(wù),發(fā)送端通過消息隊(duì)列服務(wù)與接收端進(jìn)行交互,包括:消息接收裝置,用于接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將所述消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列;消息隊(duì)列管理裝置,用于管理消息隊(duì)列,以及監(jiān)聽到執(zhí)行隊(duì)列收到所述消息后,發(fā)送所述消息;服務(wù)調(diào)用裝置,用于接收所述消息,根據(jù)所述消息查詢?nèi)罩居涗?;重?fù)檢測裝置,用于在調(diào)用業(yè)務(wù)系統(tǒng)服務(wù)前,判斷日志狀態(tài);服務(wù)調(diào)用裝置,還用于若日志狀態(tài)為處理中或日志不存在,根據(jù)所述消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型;若日志狀態(tài)為成功或者失敗,或者業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中;
消息隊(duì)列管理裝置,還用于監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送所述消息;回執(zhí)發(fā)送裝置,接收所述消息,發(fā)送給發(fā)送端,并返回處理結(jié)果;
服務(wù)調(diào)用裝置,還用于根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列;若回執(zhí)隊(duì)列存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,同時消息日志記錄裝置,用于記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,所述消息日志記錄裝置,用于直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
還用于若回執(zhí)隊(duì)列中的消息發(fā)送成功,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
服務(wù)調(diào)用裝置,還用于若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,回執(zhí)發(fā)送裝置,重新接收消息;以及若執(zhí)行隊(duì)列不存在下級延時隊(duì)列時,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,以及消息日志記錄裝置,還用于記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫。
本發(fā)明提供的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,通過消息接收裝置,接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列中,通過消息隊(duì)列管理裝置,在監(jiān)聽到執(zhí)行隊(duì)列收到消 息后發(fā)送消息,通過服務(wù)調(diào)用裝置,接收消息,根據(jù)消息查詢?nèi)罩居涗洠ㄟ^重復(fù)檢測裝置,判斷消息日志狀態(tài),根據(jù)不同的消息日志狀態(tài),進(jìn)行不同的處理,避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,實(shí)現(xiàn)有效地管理各應(yīng)用系統(tǒng)之間的消息,通過記錄調(diào)用結(jié)果,以及調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。進(jìn)一步地,根據(jù)處理結(jié)果記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,尤其地,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)收到重復(fù)消息時,判斷業(yè)務(wù)調(diào)用是否已產(chǎn)生結(jié)果,避免重復(fù)調(diào)用。
具體地說,若消息日志狀態(tài)為處理中或日志不存在,通過服務(wù)調(diào)用裝置,根據(jù)消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型,若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,通過消息隊(duì)列管理裝置,監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送回執(zhí)消息,通過回執(zhí)發(fā)送裝置,接收回執(zhí)消息,發(fā)送給發(fā)送端,并返回處理結(jié)果,通過將回執(zhí)消息及時發(fā)送給發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。
進(jìn)一步地,若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,通過服務(wù)調(diào)用裝置,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,通過回執(zhí)發(fā)送裝置,重新接收消息等待進(jìn)行繼續(xù)處理,同時通過消息日志記錄裝置,記錄消息日志狀態(tài)為處理中,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過服務(wù)調(diào)用裝置,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列,若回執(zhí)隊(duì)列存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,等待進(jìn)行繼續(xù)處理,通過消息日志記錄裝置,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,通過消息日志記錄裝置, 直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
進(jìn)一步地,若發(fā)送成功,通過消息日志記錄裝置,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,再通過服務(wù)調(diào)用裝置,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,繼續(xù)處理,以及通過消息日志記錄裝置,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
在上述技術(shù)方案中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該技術(shù)方案中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過記錄的各種不同的日志數(shù)據(jù),可以確定消息日志狀態(tài),實(shí)現(xiàn)避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,完善了消息隊(duì)列服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證消息隊(duì)列服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩居涗?,判斷消息日志狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解消息日志的相關(guān)調(diào)用信息,以調(diào)用消息隊(duì)列服務(wù),保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
本發(fā)明還提出一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,用于接收端,發(fā)送端通過消息隊(duì)列服務(wù)與接收端進(jìn)行交互,包括:調(diào)用處理裝置,用于攔截服務(wù)調(diào)用,查詢?nèi)罩居涗?,并判斷是否存在日志記錄;調(diào)用日志記錄裝置,用于若不存在日志記錄,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;還用于若存在日志記錄,根據(jù)日志記錄,返回調(diào)用結(jié)果。
本發(fā)明提供的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,通過調(diào)用處理裝置,攔截服務(wù)調(diào)用,查詢?nèi)罩居涗?,根?jù)是否存在日志記錄,進(jìn)行不同的處理,若存在日志記錄,通過調(diào)用日志記錄裝置,根據(jù)日志記錄,直接返回調(diào)用結(jié)果。進(jìn)一步地,若不存在日志記錄,通過調(diào)用日志記錄裝置,調(diào)用 業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,最后根據(jù)日志記錄,返回調(diào)用結(jié)果,保證調(diào)用服務(wù)不會被重復(fù)調(diào)用。
在上述技術(shù)方案中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果。
在該技術(shù)方案中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速判斷是否存在日志記錄,在不存在日志記錄時,通過調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證調(diào)用服務(wù)不會被重復(fù)調(diào)用。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,詳細(xì)了解日志的相關(guān)調(diào)用信息。
本發(fā)明還提出一種支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng),包括上述任一技術(shù)方案所述的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置;上述任一技術(shù)方案所述的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置;以及上述任一技術(shù)方案所述的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置。
本發(fā)明提供的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng),通過采用用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,以及用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置,實(shí)現(xiàn)通過日志及消息隊(duì)列服務(wù)對服務(wù)進(jìn)行異步調(diào)用,保證服務(wù)重復(fù)調(diào)用的冪等性,實(shí)現(xiàn)服務(wù)間數(shù)據(jù)的最終一致性,保證服務(wù)調(diào)用的可靠性。
本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述部分中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1a是本發(fā)明的一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的流程示意圖;
圖1b是本發(fā)明的一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的發(fā)起服務(wù)調(diào)用的流程示意圖;
圖1c是本發(fā)明的一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的調(diào)用消息發(fā)送的流程示意圖;
圖1d是本發(fā)明的一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的回執(zhí)處理的流程示意圖;
圖2是本發(fā)明的一個實(shí)施例的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的流程示意圖;
圖3是本發(fā)明的一個實(shí)施例的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的流程示意圖;
圖4是本發(fā)明的一個實(shí)施例的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置的示意圖;
圖5是本發(fā)明的一個實(shí)施例的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置的示意圖;
圖6是本發(fā)明的一個實(shí)施例的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置的示意圖;
圖7是本發(fā)明的一個實(shí)施例的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)的示意圖;
圖8是本發(fā)明的另一個實(shí)施例的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)的示意圖。
具體實(shí)施方式
為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說明的是,在不沖突的情況下,本申請的實(shí)施例及實(shí)施例中的特征可以相互組合。
在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實(shí)施,因此,本發(fā)明的保護(hù)范圍并不限于下面公開的具體實(shí)施例的限制。
如圖1a所示,本發(fā)明的一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu)事 務(wù)最終一致性的方法的流程示意圖:
步驟102,發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
步驟104,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù);
步驟106,接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗洠鶕?jù)日志狀態(tài)判斷調(diào)用處理是否完成,若調(diào)用處理完成,進(jìn)行步驟108;以及若調(diào)用為處理中,進(jìn)行步驟110;
步驟108,不作處理;
步驟110,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,返回步驟102。
本發(fā)明提供的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,通過發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),通過日志以及消息隊(duì)列對服務(wù)進(jìn)行異步數(shù)據(jù)調(diào)用,保證服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,進(jìn)而根據(jù)日志狀態(tài)確定當(dāng)前調(diào)用處理的情況,保證了調(diào)用結(jié)果處理的可靠性。若日志狀態(tài)表明調(diào)用處理完成,不作處理,若日志狀態(tài)表明調(diào)用仍在處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,進(jìn)行后續(xù)處理,繼續(xù)發(fā)起服務(wù)調(diào)用。
具體實(shí)施例中,當(dāng)日志寫入動作時,通過異步任務(wù)觸發(fā)掃描任務(wù),同時定時發(fā)起掃描任務(wù)。進(jìn)一步地,通過掃描任務(wù)查詢?nèi)罩緮?shù)據(jù)庫,查詢狀態(tài)為“未調(diào)用”以及“處理中”的日志,根據(jù)上述查詢到的日志調(diào)用消息隊(duì)列服務(wù)。
如圖1a所示,本發(fā)明的另一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu) 事務(wù)最終一致性的方法的流程示意圖:
步驟102,發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
步驟104,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù);
步驟106,接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,根?jù)日志狀態(tài)判斷調(diào)用處理是否完成,若調(diào)用處理完成,進(jìn)行步驟108;以及若調(diào)用為處理中,進(jìn)行步驟110;
步驟108,不作處理;
步驟110,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,返回步驟102;以及
步驟112,在調(diào)用請求未成功發(fā)送時,返回步驟102。
在該實(shí)施例中,在調(diào)用請求未成功發(fā)送時,通過重新發(fā)起服務(wù)調(diào)用,以支持發(fā)生錯誤時的重新處理,再通過記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并等待重新發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),使得服務(wù)調(diào)用更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證業(yè)務(wù)調(diào)用一定被執(zhí)行,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
具體實(shí)施例中,如果服務(wù)長時間未返回結(jié)果,可以手動或定時重復(fù)發(fā)起服務(wù)調(diào)用。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,步驟102,具體包括:業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,攔截調(diào)用遠(yuǎn)程服務(wù)接口;生成全局唯一的事務(wù)ID,并記錄事務(wù)ID;實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并記錄日志的調(diào)用狀態(tài)為未調(diào)用。
在該實(shí)施例中,業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,通過攔截調(diào)用遠(yuǎn)程服務(wù)接口,生成全局唯一的事務(wù)ID,并記錄事務(wù)ID,保證不同的應(yīng)用系統(tǒng)生成不同的ID,以及相同的應(yīng)用系統(tǒng)在每次服務(wù)調(diào)用時生成的ID不重復(fù)。進(jìn)一步地,通過實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并記錄 日志的調(diào)用狀態(tài)為未調(diào)用,實(shí)現(xiàn)通過事務(wù)ID查詢?nèi)罩居涗洠涂梢圆樵兊秸{(diào)用狀態(tài)為未調(diào)用的日志,查詢速度快,進(jìn)而可以快速判斷日志狀態(tài),使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該實(shí)施例中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過各種不同的日志數(shù)據(jù),實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速根據(jù)日志狀態(tài)判斷調(diào)用處理是否完成,使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解日志的相關(guān)調(diào)用信息,實(shí)現(xiàn)及時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,進(jìn)而調(diào)用消息隊(duì)列服務(wù)。進(jìn)一步地,方便查詢?nèi)罩居涗洠沟没貓?zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,同時進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
如圖1b至圖1d所示,本發(fā)明的再一個實(shí)施例的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的流程示意圖:
其中,如圖1b所示,發(fā)起服務(wù)調(diào)用的流程包括:
步驟114,業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口;攔截調(diào)用遠(yuǎn)程服務(wù)接口;生成全局唯一的事務(wù)ID;以及記錄日志,并記錄日志的調(diào)用狀態(tài)為未調(diào)用;
步驟116,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
步驟118,定時掃描日志數(shù)據(jù);
步驟120,調(diào)用消息隊(duì)列服務(wù);
如圖1c所示,調(diào)用消息發(fā)送流程包括:
步驟122,當(dāng)日志寫入動作時,通過異步任務(wù)觸發(fā)掃描任務(wù),或者定時發(fā)起掃描任務(wù);
步驟124,掃描任務(wù)查詢?nèi)罩緮?shù)據(jù)庫,查詢狀態(tài)為“未調(diào)用”的日志;以及掃描任務(wù)查詢?nèi)罩緮?shù)據(jù)庫,查詢狀態(tài)為“處理中”的日志;
步驟126,根據(jù)查詢到的日志調(diào)用消息隊(duì)列服務(wù);
如圖1d所示,回執(zhí)處理的流程包括:
步驟128,接收回執(zhí)消息;
步驟130,根據(jù)回執(zhí)消息查詢?nèi)罩居涗洠?/p>
步驟132,判斷日志狀態(tài)是否處理完成;若日志狀態(tài)為處理完成,進(jìn)行步驟140;若日志狀態(tài)為處理中,進(jìn)行步驟134;
步驟134,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志;
步驟136,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
步驟138,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口;
步驟140,不作處理。
在該實(shí)施例中,通過發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫,根據(jù)查詢到的日志發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),通過日志以及消息隊(duì)列對服務(wù)進(jìn)行異步數(shù)據(jù)調(diào)用,保證服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,進(jìn)而根據(jù)日志狀態(tài)確定當(dāng)前調(diào)用處理的情況,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,保證了調(diào)用結(jié)果處理的可靠性。若日志狀態(tài)表明調(diào)用處理完成,不作處理,若日志狀態(tài)表明調(diào)用仍在處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,進(jìn)行后續(xù)處理,繼續(xù)發(fā)起服務(wù)調(diào)用。
具體實(shí)施例中,根據(jù)返回結(jié)果的成功或失敗狀態(tài),調(diào)用相應(yīng)業(yè)務(wù)的接口進(jìn)行后續(xù)處理。進(jìn)一步地,如果服務(wù)長時間未返回結(jié)果,可以手動或定時重復(fù)發(fā)起服務(wù)調(diào)用。
優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
如圖2所示,本發(fā)明的一個實(shí)施例的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的流程示意圖:
步驟232,接收發(fā)送端傳遞的消息;
步驟234,調(diào)用消息隊(duì)列;
步驟236,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列,管理消息隊(duì)列,以及監(jiān)聽到執(zhí)行隊(duì)列收到消息后,發(fā)送消息;
步驟238,接收消息;
步驟240,查詢消息日志,同時進(jìn)行步驟268和步驟242;
步驟242,判斷消息日志狀態(tài);判斷消息日志狀態(tài);若消息日志狀態(tài)為處理中或日志不存在,進(jìn)行步驟244;若消息日志狀態(tài)為成功或者失敗,進(jìn)行步驟246;
步驟244,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),進(jìn)行步驟270;
步驟246,通知回執(zhí)隊(duì)列;
步驟248,將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中;
步驟250,接收回執(zhí)消息;
步驟252,發(fā)送給發(fā)送端,并返回處理結(jié)果;
步驟254,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,進(jìn)行步驟256;若發(fā)送成功,進(jìn)行步驟262;
步驟256,計(jì)算下級延時隊(duì)列;
步驟258,判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列;若回執(zhí)隊(duì)列存在下級延時隊(duì)列,進(jìn)行步驟260;若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,進(jìn)行步驟266;
步驟260,將消息放入下級延時隊(duì)列,同時進(jìn)行步驟264;
步驟262,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并進(jìn)行步驟268;
步驟264,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并進(jìn)行步驟268;
步驟266,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并進(jìn)行步驟268;
步驟268,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
步驟270,判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型;若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,進(jìn)行步驟246;若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,進(jìn)行步驟272;
步驟272,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列;
步驟274,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若執(zhí)行隊(duì)列存在下級延 時隊(duì)列,進(jìn)行步驟276;若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,返回步驟246;
步驟276,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,返回步驟236,同時進(jìn)行步驟278;
步驟278,記錄消息日志狀態(tài)為處理中,并進(jìn)行步驟268;
其中,如圖2所示,步驟280,根據(jù)處理結(jié)果記錄日志,步驟280包括:步驟262、步驟264、步驟266以及步驟278。
本發(fā)明提供的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,通過接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列中,在監(jiān)聽到執(zhí)行隊(duì)列收到消息后發(fā)送消息,接收消息,根據(jù)消息查詢?nèi)罩居涗?,判斷消息日志狀態(tài),根據(jù)不同的消息日志狀態(tài),進(jìn)行不同的處理,避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,實(shí)現(xiàn)有效地管理各應(yīng)用系統(tǒng)之間的消息,通過記錄調(diào)用結(jié)果,以及調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。進(jìn)一步地,根據(jù)處理結(jié)果記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,尤其地,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)收到重復(fù)消息時,判斷業(yè)務(wù)調(diào)用是否已產(chǎn)生結(jié)果,避免重復(fù)調(diào)用。
具體地說,若消息日志狀態(tài)為處理中或日志不存在,根據(jù)消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型,若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送回執(zhí)消息,接收回執(zhí)消息,發(fā)送給發(fā)送端,并返回處理結(jié)果,通過將回執(zhí)消息及時發(fā)送給發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。
進(jìn)一步地,若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若執(zhí)行隊(duì)列存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,等待進(jìn)行繼續(xù)處理,同時記錄消息日志狀態(tài)為處理中,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā) 送失敗,計(jì)算下級延時隊(duì)列,并判斷是否存在下級延時隊(duì)列,若存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,等待進(jìn)行繼續(xù)處理,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
進(jìn)一步地,若發(fā)送成功,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,繼續(xù)處理,以及直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該實(shí)施例中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過記錄的各種不同的日志數(shù)據(jù),可以確定消息日志狀態(tài),實(shí)現(xiàn)避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,完善了消息隊(duì)列服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證消息隊(duì)列服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩居涗?,判斷消息日志狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解消息日志的相關(guān)調(diào)用信息,以調(diào)用消息隊(duì)列服務(wù),保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
具體實(shí)施例中,可以通過事務(wù)ID查詢消息日志。
如圖3所示,本發(fā)明的一個實(shí)施例的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法的流程示意圖:
步驟310,攔截服務(wù)調(diào)用;
步驟312,查詢?nèi)罩居涗?,同時進(jìn)行步驟314和步驟320;
步驟314,判斷是否存在日志記錄;若不存在日志記錄,進(jìn)行步驟316;若存在日志記錄,進(jìn)行步驟318;
步驟316,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,同時進(jìn)行步驟320;
步驟318,根據(jù)日志記錄,返回調(diào)用結(jié)果;
步驟320,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫。
本發(fā)明提供的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的方法,通過攔截服務(wù)調(diào)用,查詢?nèi)罩居涗?,根?jù)是否存在日志記錄,進(jìn)行不同的處理,若存在日志記錄,根據(jù)日志記錄,直接返回調(diào)用結(jié)果。進(jìn)一步地,若不存在日志記錄,通過調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,最后根據(jù)日志記錄,返回調(diào)用結(jié)果,保證重復(fù)調(diào)用服務(wù)不會被重復(fù)調(diào)用。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果。
在該實(shí)施例中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速判斷是否存在日志記錄,在不存在日志記錄時,通過調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證調(diào)用服務(wù)不會被重復(fù)調(diào)用。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,詳細(xì)了解日志的相關(guān)調(diào)用信息。
具體實(shí)施例中,可以通過事務(wù)ID查詢消息日志。
如圖4所示,本發(fā)明的一個實(shí)施例的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置400的示意圖:
日志記錄裝置402,用于發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
定時發(fā)送裝置404,用于當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù);
回執(zhí)處理裝置406,用于接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗洠鶕?jù)日志狀態(tài)判斷調(diào)用處理是否完成,若調(diào)用為處理完成,不作處理;以及還用于若調(diào)用為處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,繼續(xù)發(fā)起服務(wù)調(diào)用。
本發(fā)明提供的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置400,通過日志記錄裝置402,發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過定時發(fā)送裝置404,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),通過日志以及消息隊(duì)列對服務(wù)進(jìn)行異步數(shù)據(jù)調(diào)用,保證服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過回執(zhí)處理裝置406,接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,進(jìn)而根據(jù)日志狀態(tài)確定當(dāng)前調(diào)用處理的情況,保證了調(diào)用結(jié)果處理的可靠性。若日志狀態(tài)表明調(diào)用處理完成,不作處理,若日志狀態(tài)表明調(diào)用仍在處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,進(jìn)行后續(xù)處理,繼續(xù)發(fā)起服務(wù)調(diào)用。
具體實(shí)施例中,當(dāng)日志寫入動作時,通過異步任務(wù)觸發(fā)發(fā)送裝置的掃描任務(wù),同時定時發(fā)送裝置定時發(fā)起掃描任務(wù)。進(jìn)一步地,通過掃描任務(wù)查詢?nèi)罩緮?shù)據(jù)庫,查詢狀態(tài)為“未調(diào)用”以及“處理中”的日志,根據(jù)上述查詢到的日志調(diào)用消息隊(duì)列服務(wù)。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志記錄裝置,還用于在調(diào)用請求未成功發(fā)送時,重新發(fā)起服務(wù)調(diào)用。
在該實(shí)施例中,在調(diào)用請求未成功發(fā)送時,通過日志記錄裝置,重新發(fā)起服務(wù)調(diào)用,以支持發(fā)生錯誤時的重新處理,再通過記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并等待重新發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),使得服務(wù)調(diào)用更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證業(yè)務(wù)調(diào)用一定被執(zhí)行,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
具體實(shí)施例中,如果服務(wù)長時間未返回結(jié)果,可以手動或定時重復(fù)發(fā) 起服務(wù)調(diào)用。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志記錄裝置,具體用于:業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,攔截調(diào)用遠(yuǎn)程服務(wù)接口;生成全局唯一的事務(wù)ID,并記錄所述事務(wù)ID;實(shí)時存儲日志數(shù)據(jù),并記錄日志的調(diào)用狀態(tài)為未調(diào)用。
在該實(shí)施例中,業(yè)務(wù)系統(tǒng)服務(wù)的業(yè)務(wù)代碼調(diào)用遠(yuǎn)程服務(wù)接口時,通過日志記錄裝置,攔截調(diào)用遠(yuǎn)程服務(wù)接口,生成全局唯一的事務(wù)ID,并記錄事務(wù)ID,保證不同的應(yīng)用系統(tǒng)生成不同的ID,以及相同的應(yīng)用系統(tǒng)在每次服務(wù)調(diào)用時生成的ID不重復(fù)。進(jìn)一步地,通過實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,并記錄日志的調(diào)用狀態(tài)為未調(diào)用,實(shí)現(xiàn)通過事務(wù)ID查詢?nèi)罩居涗?,就可以查詢到調(diào)用狀態(tài)為未調(diào)用的日志,查詢速度快,進(jìn)而可以快速判斷日志狀態(tài),使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該實(shí)施例中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過各種不同的日志數(shù)據(jù),實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速根據(jù)日志狀態(tài)判斷調(diào)用處理是否完成,使得回執(zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,進(jìn)一步地保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解日志的相關(guān)調(diào)用信息,實(shí)現(xiàn)及時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,進(jìn)而調(diào)用消息隊(duì)列服務(wù),保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,方便查詢?nèi)罩居涗洠沟没貓?zhí)處理更加及時、有效,完善了服務(wù)調(diào)用機(jī)制,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾進(jìn)一步地保證服務(wù)調(diào)用的可靠性。
如圖5所示,本發(fā)明的一個實(shí)施例的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置500的示意圖:
消息接收裝置502,用于接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將所述消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列;
消息隊(duì)列管理裝置504,用于管理消息隊(duì)列,以及監(jiān)聽到執(zhí)行隊(duì)列收到所述消息后,發(fā)送所述消息;
服務(wù)調(diào)用裝置506,用于接收所述消息,根據(jù)所述消息查詢?nèi)罩居涗洠?/p>
重復(fù)檢測裝置508,用于在調(diào)用業(yè)務(wù)系統(tǒng)服務(wù)前,判斷日志狀態(tài);
服務(wù)調(diào)用裝置506,還用于若日志狀態(tài)為處理中或日志不存在,根據(jù)所述消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型;若日志狀態(tài)為成功或者失敗,或者業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中;
消息隊(duì)列管理裝置504,還用于監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送所述消息;
回執(zhí)發(fā)送裝置510,接收所述消息,發(fā)送給發(fā)送端,并返回處理結(jié)果;
服務(wù)調(diào)用裝置506,還用于根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列;若回執(zhí)隊(duì)列存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,同時消息日志記錄裝置,用于記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,
所述消息日志記錄裝置512,用于直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
還用于若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;還用于若回執(zhí)隊(duì)列中的消息發(fā)送成功,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;
服務(wù)調(diào)用裝置506,還用于若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,回執(zhí)發(fā)送裝置,重新接收消息;以及若執(zhí)行隊(duì)列不存在下級延時隊(duì)列時,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,以及
消息日志記錄裝置512,還用于記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí) 時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫。
本發(fā)明提供的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置500,通過消息接收裝置502,接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列中,通過消息隊(duì)列管理裝置504,在監(jiān)聽到執(zhí)行隊(duì)列收到消息后發(fā)送消息,通過服務(wù)調(diào)用裝置506,接收消息,根據(jù)消息查詢?nèi)罩居涗?,通過重復(fù)檢測裝置508,判斷消息日志狀態(tài),根據(jù)不同的消息日志狀態(tài),進(jìn)行不同的處理,避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,實(shí)現(xiàn)有效地管理各應(yīng)用系統(tǒng)之間的消息,通過記錄調(diào)用結(jié)果,以及調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。進(jìn)一步地,根據(jù)處理結(jié)果記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,尤其地,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)收到重復(fù)消息時,判斷業(yè)務(wù)調(diào)用是否已產(chǎn)生結(jié)果,避免重復(fù)調(diào)用。
具體地說,若消息日志狀態(tài)為處理中或日志不存在,通過服務(wù)調(diào)用裝置506,根據(jù)消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型,若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,通過消息隊(duì)列管理裝置504,監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送回執(zhí)消息,通過回執(zhí)發(fā)送裝置510,接收回執(zhí)消息,發(fā)送給發(fā)送端,并返回處理結(jié)果,通過將回執(zhí)消息及時發(fā)送給發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。
進(jìn)一步地,若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,通過服務(wù)調(diào)用裝置506,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,通過回執(zhí)發(fā)送裝置510,重新接收消息等待進(jìn)行繼續(xù)處理,同時通過消息日志記錄裝置,記錄消息日志狀態(tài)為處理中,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過服務(wù)調(diào)用裝置506,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存 在下級延時隊(duì)列,若回執(zhí)隊(duì)列存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,等待進(jìn)行繼續(xù)處理,通過消息日志記錄裝置512,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,通過消息日志記錄裝置512,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
進(jìn)一步地,若發(fā)送成功,通過消息日志記錄裝置512,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,再通過服務(wù)調(diào)用裝置506,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,繼續(xù)處理,以及通過消息日志記錄裝置512,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài)。
在該實(shí)施例中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),通過記錄的各種不同的日志數(shù)據(jù),可以確定消息日志狀態(tài),實(shí)現(xiàn)避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,完善了消息隊(duì)列服務(wù)調(diào)用機(jī)制,進(jìn)一步地保證消息隊(duì)列服務(wù)調(diào)用的可靠性。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩居涗?,判斷消息日志狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用狀態(tài),詳細(xì)了解消息日志的相關(guān)調(diào)用信息,以調(diào)用消息隊(duì)列服務(wù),保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
如圖6所示,本發(fā)明的一個實(shí)施例的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置600的示意圖:
調(diào)用處理裝置602,用于攔截服務(wù)調(diào)用,查詢?nèi)罩居涗洠⑴袛嗍欠翊嬖谌罩居涗洠?/p>
調(diào)用日志記錄裝置604,用于若不存在日志記錄,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫;還用于若存在日志記錄,根據(jù)日志記錄,返回調(diào)用結(jié)果。
本發(fā)明提供的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置600,通過調(diào)用處理裝置602,攔截服務(wù)調(diào)用,查詢?nèi)罩居涗洠鶕?jù)是否存在日志記錄,進(jìn)行不同的處理,若存在日志記錄,通過調(diào)用日志記錄裝置604,根據(jù)日志記錄,直接返回調(diào)用結(jié)果。進(jìn)一步地,若不存在日志記錄,通過調(diào)用日志記錄裝置604,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,最后根據(jù)日志記錄,返回調(diào)用結(jié)果,保證重復(fù)調(diào)用服務(wù)不會被重復(fù)調(diào)用。
在本發(fā)明的一個實(shí)施例中,優(yōu)選地,日志數(shù)據(jù)包括以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果。
在該實(shí)施例中,日志數(shù)據(jù)包括但并不局限于以下至少之一或其組合:事務(wù)ID、調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,實(shí)現(xiàn)通過不同的日志數(shù)據(jù)查詢?nèi)罩居涗?,查詢速度快,進(jìn)而可以快速判斷是否存在日志記錄,在不存在日志記錄時,通過調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證調(diào)用服務(wù)不會被重復(fù)調(diào)用。進(jìn)一步地,可以通過事務(wù)ID直接查詢?nèi)罩镜恼{(diào)用狀態(tài),當(dāng)然也可以通過調(diào)用參數(shù)、環(huán)境參數(shù)、調(diào)用時間、調(diào)用結(jié)果,詳細(xì)了解日志的相關(guān)調(diào)用信息。
如圖7所示,本發(fā)明的一個實(shí)施例的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)700的示意圖:上述任一技術(shù)方案所述的用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置702;上述任一技術(shù)方案所述的用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置704;以及上述任一技術(shù)方案所述的用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置706。
本發(fā)明提供的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)700,通過采用用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置702,用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置704,以及用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置706,實(shí)現(xiàn)通過日志及消息隊(duì)列服務(wù)對服務(wù)進(jìn)行異步調(diào)用,保證服務(wù)重復(fù)調(diào)用的冪等性,實(shí)現(xiàn)服務(wù)間數(shù)據(jù)的最終一致性,保證服務(wù) 調(diào)用的可靠性。
如圖8所示,本發(fā)明的另一個實(shí)施例的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)800的示意圖:
其中,用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置802包括:日志記錄裝置,定時發(fā)送裝置以及回執(zhí)處理裝置;
其中,用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝804包括:消息接收裝置,消息隊(duì)列管理裝置,服務(wù)調(diào)用裝置,消息日志記錄裝置,重復(fù)檢測裝置,以及回執(zhí)發(fā)送裝置;
其中,用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置806包括:調(diào)用日志記錄裝置和調(diào)用處理裝置。
本發(fā)明提供的支持微服務(wù)架構(gòu)事務(wù)最終一致性的系統(tǒng)800,通過采用用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置802,用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置804,以及用于接收端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置806,實(shí)現(xiàn)通過日志及消息隊(duì)列服務(wù)對服務(wù)進(jìn)行異步調(diào)用,保證服務(wù)重復(fù)調(diào)用的冪等性,實(shí)現(xiàn)服務(wù)間數(shù)據(jù)的最終一致性,保證服務(wù)調(diào)用的可靠性。
進(jìn)一步地,用于發(fā)送端的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置802,通過日志記錄裝置,發(fā)起服務(wù)調(diào)用,記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過定時發(fā)送裝置,當(dāng)日志寫入動作時,定時檢查日志數(shù)據(jù)庫中未發(fā)起服務(wù)調(diào)用或者超過指定時間未收到返回結(jié)果的日志,發(fā)送調(diào)用請求,以調(diào)用消息隊(duì)列服務(wù),同時通過日志以及消息隊(duì)列對服務(wù)進(jìn)行異步數(shù)據(jù)調(diào)用,保證服務(wù)調(diào)用的可靠性。進(jìn)一步地,通過回執(zhí)處理裝置,接收回執(zhí)消息,根據(jù)回執(zhí)消息查詢?nèi)罩居涗?,進(jìn)而根據(jù)日志狀態(tài)確定當(dāng)前調(diào)用處理的情況,保證調(diào)用服務(wù)失敗后,發(fā)起方業(yè)務(wù)數(shù)據(jù)的回滾,保證了調(diào)用結(jié)果處理的可靠性。若日志狀態(tài)表明調(diào)用處理完成,不作處理,若日志狀態(tài)表明調(diào)用仍在處理中,調(diào)用返回結(jié)果,并將返回結(jié)果記錄到日志中,實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,根據(jù)返回結(jié)果的狀態(tài)調(diào)用相應(yīng)業(yè)務(wù)的接口,進(jìn)行后續(xù)處理,繼續(xù)發(fā)起服務(wù)調(diào)用。
進(jìn)一步地,用于消息隊(duì)列服務(wù)的支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置804,通過消息接收裝置,接收發(fā)送端傳遞的消息,調(diào)用消息隊(duì)列,將消息放入執(zhí)行隊(duì)列中的實(shí)時隊(duì)列中,通過消息隊(duì)列管理裝置,在監(jiān)聽到執(zhí)行隊(duì)列收到消息后發(fā)送消息,通過服務(wù)調(diào)用裝置,接收消息,根據(jù)消息查詢?nèi)罩居涗洠ㄟ^重復(fù)檢測裝置,判斷消息日志狀態(tài),根據(jù)不同的消息日志狀態(tài),進(jìn)行不同的處理,避免因?yàn)橄⒅貜?fù)發(fā)送導(dǎo)致業(yè)務(wù)系統(tǒng)處理錯誤,實(shí)現(xiàn)有效地管理各應(yīng)用系統(tǒng)之間的消息,通過記錄調(diào)用結(jié)果,以及調(diào)用服務(wù)失敗重試,將處理結(jié)果及時通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。進(jìn)一步地,根據(jù)處理結(jié)果記錄日志,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,尤其地,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)收到重復(fù)消息時,判斷業(yè)務(wù)調(diào)用是否已產(chǎn)生結(jié)果,避免重復(fù)調(diào)用。
具體地說,若消息日志狀態(tài)為處理中或日志不存在,通過服務(wù)調(diào)用裝置,根據(jù)消息調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),判斷業(yè)務(wù)系統(tǒng)服務(wù)是否調(diào)用成功及調(diào)用失敗原因類型,若業(yè)務(wù)系統(tǒng)服務(wù)調(diào)用成功或者業(yè)務(wù)原因調(diào)用失敗,通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,通過消息隊(duì)列管理裝置,監(jiān)聽到回執(zhí)隊(duì)列收到包含返回結(jié)果的消息后,發(fā)送回執(zhí)消息,通過回執(zhí)發(fā)送裝置,接收回執(zhí)消息,發(fā)送給發(fā)送端,并返回處理結(jié)果,通過將回執(zhí)消息及時發(fā)送給發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效。
進(jìn)一步地,若業(yè)務(wù)系統(tǒng)服務(wù)非業(yè)務(wù)原因調(diào)用失敗,通過服務(wù)調(diào)用裝置,根據(jù)當(dāng)前隊(duì)列計(jì)算下級延時隊(duì)列,判斷執(zhí)行隊(duì)列是否存在下級延時隊(duì)列,若存在下級延時隊(duì)列,將消息放入下級執(zhí)行隊(duì)列中的延時隊(duì)列,通過回執(zhí)發(fā)送裝置,重新接收消息等待進(jìn)行繼續(xù)處理,同時通過消息日志記錄裝置,記錄消息日志狀態(tài)為處理中,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,通過服務(wù)調(diào)用裝置,根據(jù)處理結(jié)果,判斷回執(zhí)隊(duì)列中的消息是否發(fā)送成功;若發(fā)送失敗,計(jì)算下級延時隊(duì)列,并判斷回執(zhí)隊(duì)列是否存在下級延時隊(duì)列,若回執(zhí)隊(duì)列存在下級延時隊(duì)列,將消息放入下級延時隊(duì)列,等待進(jìn)行繼續(xù)處理,通過消息日志記錄裝置,記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,通過調(diào)用服務(wù)失敗重試,將處理結(jié)果及時 通知發(fā)送端,實(shí)現(xiàn)發(fā)送端快速地進(jìn)行回執(zhí)處理,使得回執(zhí)處理及時、有效,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若回執(zhí)隊(duì)列不存在下級延時隊(duì)列,通過消息日志記錄裝置,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
進(jìn)一步地,若發(fā)送成功,通過消息日志記錄裝置,記錄消息日志狀態(tài)為結(jié)果發(fā)送成功,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,保證消息隊(duì)列服務(wù)調(diào)用的可靠性。
進(jìn)一步地,若執(zhí)行隊(duì)列不存在下級延時隊(duì)列,再通過服務(wù)調(diào)用裝置,重新通知回執(zhí)隊(duì)列,并將返回結(jié)果放入回執(zhí)隊(duì)列的實(shí)時隊(duì)列中,繼續(xù)處理,以及通過消息日志記錄裝置,直接記錄消息日志狀態(tài)為回執(zhí)發(fā)送失敗,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,用于后續(xù)運(yùn)維人員檢查日志進(jìn)行處理。
進(jìn)一步地,用于接收端地支持微服務(wù)架構(gòu)事務(wù)最終一致性的裝置906,通過調(diào)用處理裝置,攔截服務(wù)調(diào)用,查詢?nèi)罩居涗洠鶕?jù)是否存在日志記錄,進(jìn)行不同的處理,若存在日志記錄,通過調(diào)用日志記錄裝置,根據(jù)日志記錄,直接返回調(diào)用結(jié)果。進(jìn)一步地,若不存在日志記錄,通過調(diào)用日志記錄裝置,調(diào)用業(yè)務(wù)系統(tǒng)服務(wù),記錄日志,返回調(diào)用結(jié)果,并實(shí)時存儲日志數(shù)據(jù)至日志數(shù)據(jù)庫,最后根據(jù)日志記錄,返回調(diào)用結(jié)果,保證重復(fù)調(diào)用服務(wù)不會被重復(fù)調(diào)用。
在本發(fā)明所述的實(shí)施例中,在上述實(shí)施例中,所述日志數(shù)據(jù)均不限于所列日志數(shù)據(jù),其他與所述日志數(shù)據(jù)相關(guān)的數(shù)據(jù)信息均在本申請保護(hù)范圍之內(nèi)。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。