[發明專利]一種基于消息落庫的MQ消息可靠性投遞解決方法在審
| 申請號: | 202011623035.2 | 申請日: | 2020-12-30 |
| 公開(公告)號: | CN112698969A | 公開(公告)日: | 2021-04-23 |
| 發明(設計)人: | 胡樂成;曾繁陽 | 申請(專利權)人: | 佰年頤堂醫療科技股份有限公司 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54;G06F9/46 |
| 代理公司: | 北京八月瓜知識產權代理有限公司 11543 | 代理人: | 李斌 |
| 地址: | 250000 山東省濟南市歷城區*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 消息 mq 可靠性 投遞 解決方法 | ||
本發明涉及數據消息處理方法領域,具體公開了一種基于消息落庫的MQ消息可靠性投遞解決方法,包括業務系統和消息服務器,通過消息信息落庫,對消息信息狀態進行打標,當使用本方案基于消息落庫的方案時,業務數據在步驟1時已完成持久化,當執行步驟2發送消息時出現調用方請求超時的情況,該方案的分布式定時任務會檢測到消息數據入庫狀態為未成功的消息數據,進行消息重發,本方案解決了現有技術中業務處理和消息發送一致性無法保證的問題。
技術領域
本公開涉及數據消息處理方法領域,具體涉及一種基于消息落庫的MQ消息可靠性投遞解決方法。
背景技術
隨著分布式服務架構的流行與普及,原來在單體應用中執行的多個邏輯操作,現在被拆分成了多個服務之間的遠程調用。雖然服務化為我們的系統帶來了水平伸縮的能力,然而隨之而來挑戰就是分布式事務問題,多個服務之間使用自己單獨維護的數據庫,它們彼此之間不在同一個事務中,假如A執行成功了,B執行卻失敗了,而A的事務此時已經提交,無法回滾,那么最終就會導致兩邊數據不一致性的問題。
使用普通消息的處理流程,是無法保證業務處理與消息發送的一致性,根本原因在于:遠程調用,其最終結果可能為成功、失敗、超時。而對于超時的情況,處理方最終的結果可能是成功,也可能是失敗,調用方是無法知曉的。為了保證兩邊數據的一致性,我們只能從其他地方尋找新的突破口。
發明內容
本發明的目的在于解決現有的業務處理和消息發送一致性無法保證的問題。
為了達到上述目的,本發明的基礎方案提供一種基于消息落庫的MQ消息可靠性投遞解決方法,包括業務系統和消息服務器,通過消息信息落庫,對消息信息狀態進行打標,具體步驟如下:
步驟1:業務系統在事務內,進行業務數據入庫和消息數據入庫,此時消息數據入庫的狀態為:未成功;
步驟2:在步驟1中業務數據入庫成功的前提下,消息發送者向消息服務器發送消息并完成消息持久化;
步驟3:消息服務器收到消息后,發送確認收到消息通知;
步驟4:生產者收到消息服務器發送的確認收到消息通知后,修改消息數據庫中消息數據入庫狀態為:成功;
步驟5:布置分布式定時任務,查詢數據庫中消息數據入庫狀態為未成功且允許進行重試的數據;
步驟6:重新發送上一步中檢索出來的隊列消息給消息發送者;
步驟7:通過分布式定時任務,查詢當前重試次數大于N的數據,修改該消息數據入庫的狀態為:發送失敗。
進一步,還包括消息補償表,消息補償表包括流水號、消息主題、消息標簽、業務key值、異常信息、消息投遞狀態0∶未成功;1∶成功;2∶失敗、重試次數、允許進行重試的開始時間、創建時間和更新時間,步驟5中,通過消息補償表中的允許進行重試的開始時間的記錄值來判斷是否允許進行重試。
進一步,步驟7中,通過消息補償表的重試次數的記錄值來查找當前重試次數大于N的數據。
進一步,步驟2中,消息發送者向消息服務器發送消息后,消息服務器將消息發送給消息消費者,消息消費者執行業務處理,然后將信息反饋給消息服務器。
本發明的原理及效果:
本方案在執行業務操作的時候,記錄一條消息數據到數據庫,并且消息數據的記錄與業務數據的記錄必須在同一個事務內完成,基于消息落庫與普通消息處理流程相比,使用普通消息方式在調用方請求超時時,調用方回滾業務處理操作,假如處理方實際的處理狀態為成功,那么將會出現業務處理未成功而消息處理成功不一致的情況。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于佰年頤堂醫療科技股份有限公司,未經佰年頤堂醫療科技股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202011623035.2/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種新型泛塞封密封的加氫槍
- 下一篇:一種電力用鋼管塔桿熱噴鋅系統





