本申請涉及智能家居,尤其涉及一種基于分布式系統(tǒng)的消息冪等處理方法及裝置。
背景技術(shù):
1、在計算機科學(xué)中,冪等是指進行一次或者多次操作后,結(jié)果都是相同的效果,不會再次改變現(xiàn)有的狀態(tài)。冪等是一種非常重要的概念,在分布式系統(tǒng)、并發(fā)控制、數(shù)據(jù)庫操作等領(lǐng)域中都有廣泛的應(yīng)用。
2、目前,為了保障消息冪等,通過在生產(chǎn)者發(fā)送消息時,每條消息加一個全局的唯一身份標識(identity?document,簡稱id),以在消費時,將對應(yīng)id保存至遠程字典服務(wù)(remote?dictionary?server?,簡稱redis),并且每次消費前先去redis里面查找對應(yīng)消息,在確保沒有對應(yīng)消息的情況下,再進行消費。
3、然而,對于上述增加中間件redis方案,需要增加成本,引入額外的中間件,而且增加中間件后,流程鏈路更長,節(jié)點異常率更高。
技術(shù)實現(xiàn)思路
1、本申請?zhí)峁┮环N基于分布式系統(tǒng)的消息冪等處理方法及裝置,用以解決現(xiàn)有技術(shù)中由于消息重復(fù)請求以致業(yè)務(wù)上出現(xiàn)重復(fù)數(shù)據(jù)的缺陷,在不引入額外中間件,避免節(jié)點更多的同時,又避免與業(yè)務(wù)表直接交互以致冪等功能與業(yè)務(wù)數(shù)據(jù)耦合的情況。
2、本申請?zhí)峁┮环N基于分布式系統(tǒng)的消息冪等處理方法,包括:接收消息隊列發(fā)送的請求,所述請求中包含消費消息;基于所述請求,判斷所述消費消息能否插入在先配置的消息記錄文件中;其中,所述消息記錄文件在先配置了唯一性約束;基于所述消費消息能夠插入所述消息記錄文件中,將所述消費消息插入所述消息記錄文件中,并基于所述消費消息,執(zhí)行對應(yīng)業(yè)務(wù)邏輯程序,并判斷所述業(yè)務(wù)邏輯程序是否執(zhí)行成功;基于所述業(yè)務(wù)邏輯程序執(zhí)行成功,更新所述消息記錄文件中對應(yīng)的消息消費狀態(tài)。
3、根據(jù)本申請?zhí)峁┑囊环N基于分布式系統(tǒng)的消息冪等處理方法,在基于所述請求,判斷所述消費消息能否插入在先配置的消息記錄文件中之前,包括:創(chuàng)建消息記錄表,所述消息記錄表包括消息身份標識、消息體、消息字段和消息消費狀態(tài);對所述消息字段添加唯一性約束和索引,得到消息記錄文件。
4、根據(jù)本申請?zhí)峁┑囊环N基于分布式系統(tǒng)的消息冪等處理方法,在判斷所述業(yè)務(wù)邏輯程序是否執(zhí)行成功之后,包括:基于所述業(yè)務(wù)邏輯程序執(zhí)行失敗,刪除所述消息記錄文件中對應(yīng)消費消息的記錄。
5、根據(jù)本申請?zhí)峁┑囊环N基于分布式系統(tǒng)的消息冪等處理方法,在基于所述業(yè)務(wù)邏輯程序執(zhí)行失敗,刪除所述消息記錄文件中對應(yīng)消費消息的記錄之后,包括:將刪除的消費消息存儲至所述消息隊列中。
6、根據(jù)本申請?zhí)峁┑囊环N基于分布式系統(tǒng)的消息冪等處理方法,在基于所述請求,判斷所述消費消息能否插入在先配置的消息記錄文件中之后,包括:基于所述消費消息無法插入所述消息記錄文件中,根據(jù)所述消費消息,查找所述消息記錄文件,得到所述消息記錄文件中對應(yīng)的消息消費狀態(tài);判斷查找得到的消息記錄文件中對應(yīng)的消息消費狀態(tài)是否為消費成功,若為消費成功,則結(jié)束;否則,重新存儲至所述消息隊列中。
7、根據(jù)本申請?zhí)峁┑囊环N基于分布式系統(tǒng)的消息冪等處理方法,所述消息隊列發(fā)送的請求是基于消費產(chǎn)生的消費消息存儲至所述消息隊列后發(fā)起的。
8、本申請還提供一種基于分布式系統(tǒng)的消息冪等處理裝置,包括:請求接收模塊,接收消息隊列發(fā)送的請求,所述請求中包含消費消息;插入狀態(tài)判斷模塊,基于所述請求,判斷所述消費消息能否插入在先配置的消息記錄文件中;其中,所述消息記錄文件在先配置了唯一性約束;執(zhí)行狀態(tài)判斷模塊,基于所述消費消息能夠插入所述消息記錄文件中,將所述消費消息插入所述消息記錄文件中,并基于所述消費消息,執(zhí)行對應(yīng)業(yè)務(wù)邏輯程序,并判斷所述業(yè)務(wù)邏輯程序是否執(zhí)行成功;消息更新模塊,基于所述業(yè)務(wù)邏輯程序執(zhí)行成功,更新所述消息記錄文件中對應(yīng)的消息消費狀態(tài)。
9、本申請還提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,所述處理器執(zhí)行所述計算機程序時實現(xiàn)如上述任一種所述基于分布式系統(tǒng)的消息冪等處理方法。
10、本申請還提供一種非暫態(tài)計算機可讀存儲介質(zhì),其上存儲有計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述基于分布式系統(tǒng)的消息冪等處理方法。
11、本申請還提供一種計算機程序產(chǎn)品,包括計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述基于分布式系統(tǒng)的消息冪等處理方法。
12、本申請?zhí)峁┑幕诜植际较到y(tǒng)的消息冪等處理方法及裝置,通過基于接收的消息隊列發(fā)送的請求,判斷請求中攜帶的消費消息能否插入在先配置了唯一性約束的消息記錄文件中,從而在確定能夠插入的情況下,確定消費消息為第一次消費,將消費消息插入消息記錄文件中,并基于消費消息,執(zhí)行對應(yīng)業(yè)務(wù)邏輯程序,以在執(zhí)行成功的情況下,更新消息記錄文件中對應(yīng)消費消息的消息消費狀態(tài),通過消息記錄文件作為中間層,將冪等校驗功能剝離,不與業(yè)務(wù)混淆,并通過消息記錄文件唯一索引實現(xiàn),無需額外處理,在避免節(jié)點更多的同時,避免與業(yè)務(wù)表直接交互以致冪等功能與業(yè)務(wù)數(shù)據(jù)耦合的情況;另外,無需額外中間件,節(jié)約成本,可直接復(fù)用業(yè)務(wù)庫,簡單高效,且適用范圍廣。
1.一種?基于分布式系統(tǒng)的消息冪等處理方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的基于分布式系統(tǒng)的消息冪等處理方法,其特征在于,在基于所述請求,判斷所述消費消息能否插入在先配置的消息記錄文件中之前,包括:
3.根據(jù)權(quán)利要求1所述的基于分布式系統(tǒng)的消息冪等處理方法,其特征在于,在判斷所述業(yè)務(wù)邏輯程序是否執(zhí)行成功之后,包括:
4.根據(jù)權(quán)利要求3所述的基于分布式系統(tǒng)的消息冪等處理方法,其特征在于,在基于所述業(yè)務(wù)邏輯程序執(zhí)行失敗,刪除所述消息記錄文件中對應(yīng)消費消息的記錄之后,包括:
5.根據(jù)權(quán)利要求1所述的基于分布式系統(tǒng)的消息冪等處理方法,其特征在于,在基于所述請求,判斷所述消費消息能否插入在先配置的消息記錄文件中之后,包括:
6.根據(jù)權(quán)利要求1所述的基于分布式系統(tǒng)的消息冪等處理方法,其特征在于,所述消息隊列發(fā)送的請求是基于消費產(chǎn)生的消費消息存儲至所述消息隊列后發(fā)起的。
7.一種基于分布式系統(tǒng)的消息冪等處理裝置,其特征在于,包括:
8.一種電子設(shè)備,包括存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,其特征在于,所述處理器執(zhí)行所述計算機程序時實現(xiàn)如權(quán)利要求1至6任一項所述基于分布式系統(tǒng)的消息冪等處理方法。
9.一種非暫態(tài)計算機可讀存儲介質(zhì),其上存儲有計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)如權(quán)利要求1至6任一項所述基于分布式系統(tǒng)的消息冪等處理方法。
10.一種計算機程序產(chǎn)品,包括計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)如權(quán)利要求1至6任一項所述基于分布式系統(tǒng)的消息冪等處理方法。