本發明涉及計算機信息,更具體地,涉及基于mq消息重試機制的冪等分布式事務處理方法及系統。
背景技術:
1、在開發中我們經常會用到消息中間件mq,使用消息中間件的好處是可以解決分布式系統之間消息傳遞的問題,它能夠屏蔽各種平臺以及協議之間的特性,實現應用程序之間的協同。
2、在使用消息中間件時我們可能會碰到下面兩種情形:
3、1.由于網絡原因,生產者發送的消息mq已經收到,但是給服務響應時候超時了,導致服務器再次投遞相同的消息,這樣在消息隊列中存在兩條相同的消息,下游消費者就需要消費兩次相同的信息。
4、2.當消費者第一次消費id=1的消息時,此時消費成功但是響應mq的時候超時導致mq認為當前的消息消費者沒有成功消費,過一段時間之后重新投遞給消費者消費,那么就導致同樣的消息消費者消費了兩次。
5、開發過程中我們需要對以上兩種情況進行處理保證消費者的消費冪等性,使得消費者多次消費同樣的消息最終返回的結果是一樣的。
技術實現思路
1、本發明針對現有技術中存在的技術問題,提供基于mq消息重試機制的冪等分布式事務處理方法及系統,保證了消息處理時的冪等性。
2、根據本發明的第一方面,提供了基于mq消息重試機制的冪等分布式事務處理方法,包括以下步驟:
3、步驟s1、設計消息表,結合消息表的主鍵消息id和消息狀態進行消息處理的冪等;
4、步驟s2、基于冪等設計冪等性的業務邏輯;
5、步驟s3、設計定時任務每隔一段時間拉取消息表中過期的數據做刪除操作。
6、在上述技術方案的基礎上,本發明還可以作出如下改進。
7、可選的,所述結合消息表的主鍵消息id和消息狀態進行消息處理的冪等包括:
8、設計一張主鍵位消息id的消息表,消費者從mq拉取消息進行消費前,向該表新增一條記錄并將消息狀態設置為處理中;
9、如果新增成功,則先完成消息的本地業務,然后通知遠程調用系統;
10、如果新增失敗,以消息id為條件查詢消息表中已存在的記錄,獲取消息狀態并根據狀態值做處理。
11、可選的,如果狀態為0表示該消息正在消費中,此時給mq返回消息消費失敗等待下一次推送;
12、如果狀態為1表示消息消費成功,此時給mq返回消息消費成功。
13、可選的,如果通知成功,則將消息表中的消息狀態改為1,最后通知mq本消息消費成功;
14、如果通知失敗,則回滾業務,刪除該消息記錄,最后通知mq本消息消費失敗,等待下一次推送繼續處理業務。
15、可選的,所述結合所述消息表的主鍵消息id和消息狀態進行消息處理的冪等包括:
16、消費者從mq拉取消息進行消費時,先查詢消息表是否存在消息id為msg_id的記錄;
17、如果無記錄則表示該消息是第一次被消費,這時正常走后續邏輯;
18、如果有記錄則表示該消息已經被消費過,此時根據記錄中消息狀態來判斷消費情況。
19、可選的,所述根據記錄中消息狀態來判斷消費情況包括:
20、當消息狀態為0,表示該消息正在消費中這時跳過后續邏輯直接給mq返回消費失敗;當消息狀態為1,表示該消息消費成功這時跳過后續邏輯直接給mq返回消費成功。
21、可選的,所述基于冪等設計冪等性的業務邏輯包括:
22、設計一張業務流水表,每次處理請求時先查詢該表中是否存在相同的請求流水號,若存在則將上次處理的結果返回,若不存在則進行正常的業務邏輯處理。
23、可選的,所述設計定時任務每隔一段時間拉取消息表中過期的數據做刪除操作包括:
24、設計一個定時任務每隔間隔時間查詢消息表中所有消息狀態為1的記錄,將每條記錄對應的消息id、消息接收時間和消息超時時間放到放到list集合中,遍歷list集合計算每個消息對象的消息接收時間和當前系統時間差值,當時間差大于等于該消息對象的超時時間,就刪除消息表中該對象對應的記錄。
25、根據本發明的第二方面,提供基于mq消息重試機制的冪等分布式事務處理系統,包括:
26、生產者模塊,用于將消息發送到消息隊列;
27、消息中間件模塊,用于充當生產者和消費者之間的中介,負責接收、存儲和分發消息到合適的消費者;
28、消費者模塊,用于從消息隊列中讀取消息并進行處理;
29、數據庫模塊,用于記錄消息在被正常消費過程中的狀態流轉及死信情況下消息記錄的清除。
30、本發明還提供一種電子設備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,所述處理器執行所述程序時實現如上述任一種所述基于mq消息重試機制的冪等分布式事務處理方法。
31、本發明的技術效果和優點:
32、本發明提供基于mq消息重試機制的冪等分布式事務處理方法及系統,通過新增一張消息表,消息id為唯一主鍵,結合消息表的消息id和消息狀態,實現了消息處理時的冪等性。
33、本發明的其它特征和優點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發明而了解。本發明的目的和其他優點可通過在說明書、權利要求書以及附圖中所指出的結構來實現和獲得。
1.基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,所述結合消息表的主鍵消息id和消息狀態進行消息處理的冪等包括:
3.根據權利要求2所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,如果狀態為0表示該消息正在消費中,此時給mq返回消息消費失敗等待下一次推送;
4.根據權利要求3所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,如果通知成功,則將消息表中的消息狀態改為1,最后通知mq本消息消費成功;
5.根據權利要求1所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,所述結合所述消息表的主鍵消息id和消息狀態進行消息處理的冪等包括:
6.根據權利要求5所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,所述根據記錄中消息狀態來判斷消費情況包括:
7.根據權利要求1所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,所述基于冪等設計冪等性的業務邏輯包括:
8.根據權利要求1所述的基于mq消息重試機制的冪等分布式事務處理方法,其特征在于,所述設計定時任務每隔一段時間拉取消息表中過期的數據做刪除操作包括:
9.基于mq消息重試機制的冪等分布式事務處理系統,其特征在于,包括:
10.一種電子設備,其特征在于,包括存儲器、處理器,所述處理器用于執行存儲器中存儲的計算機程序時實現如權利要求1至7任一項所述的基于mq消息重試機制的冪等分布式事務處理方法。