[發(fā)明專利]基于雙向鏈表的消息多線程消費順序確認的方法及裝置有效
| 申請?zhí)枺?/td> | 202110612637.6 | 申請日: | 2021-06-02 |
| 公開(公告)號: | CN113312187B | 公開(公告)日: | 2023-06-16 |
| 發(fā)明(設(shè)計)人: | 劉德建;鄭彬;岳萬恕;陳宏展 | 申請(專利權(quán))人: | 福建天晴數(shù)碼有限公司 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54;G06F9/52 |
| 代理公司: | 福州旭辰知識產(chǎn)權(quán)代理事務(wù)所(普通合伙) 35233 | 代理人: | 程勇 |
| 地址: | 350000 福建省福州市君竹路83*** | 國省代碼: | 福建;35 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 雙向 消息 多線程 消費 順序 確認 方法 裝置 | ||
本發(fā)明提供了基于雙向鏈表的消息多線程消費順序確認的方法,所述方法包括以下步驟:步驟S1、創(chuàng)建雙向鏈表,隊列節(jié)點維護自身處理狀態(tài)和對應(yīng)消息的偏移量;步驟S2、主服務(wù)從消息中心中拉取消息;步驟S3、取得消息后,先入雙向鏈表尾部,再將消息提交至本地線程中執(zhí)行;步驟S4、本地業(yè)務(wù)邏輯將消息處理完成后,通知雙向鏈表對應(yīng)節(jié)點,更新狀態(tài);步驟S5、雙向鏈表的隊列頭部被更新后出隊列,提交offset,并判斷新的隊列頭部的狀態(tài);直至遇到state是未完成的head時阻塞;本發(fā)明能夠?qū)崿F(xiàn)即使多線程消費消息,也能保證后續(xù)的消息確認是按順序操作的,同時任務(wù)不需要相互等待。
技術(shù)領(lǐng)域
本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別是基于雙向鏈表的消息多線程消費順序確認的方法及裝置。
背景技術(shù)
在重要場景下(如支付回調(diào)處理),要求消費的業(yè)務(wù)消息絕不能丟失,且能充分利用高規(guī)格的服務(wù)器的性能,比如用線程池對業(yè)務(wù)消息進行快速處理。同時為了支持高并發(fā),常用的技術(shù)方案是用消息隊列來對業(yè)務(wù)解耦、對流程異步化以及削峰填谷;但是,由于引入了這個技術(shù),也增加了系統(tǒng)的復雜度和不穩(wěn)定因素,比如消息可靠性的保障,這個保障需貫穿消息流轉(zhuǎn)的每個環(huán)節(jié),比如生產(chǎn)端的事務(wù)型消息、消費端的手動應(yīng)答確認(ACK)等。本發(fā)明重點關(guān)注消費端的手動ACK機制,其技術(shù)難度是需確保手動ACK順序和消息順序的一致性。
消息隊列之所以性能高處理快,是因為采用了文件順序讀寫方式,系統(tǒng)在拉取消息進行消費時,是按順序文件的偏移量(offset)進行拉取的,如果commit?offset的順序錯亂,會使得服務(wù)端的消息狀態(tài)錯亂,比如消息重發(fā)。因此,如果服務(wù)啟動了線程池,對消息進行拉取處理,由于各線程的處理速度不一定一致,所以無法保證各線程處理完之后對各自消息的ACK操作是順序的。
傳統(tǒng)的解決方案是:提交一批任務(wù),批量等待統(tǒng)一提交,缺點很明顯,相互等待,極大犧牲服務(wù)器性能。
發(fā)明內(nèi)容
為克服上述問題,本發(fā)明的目的是提供一種能夠?qū)崿F(xiàn)即使多線程消費消息,也能保證后續(xù)的消息確認是按順序操作的,同時任務(wù)不需要相互等待的基于雙向鏈表的消息多線程消費順序確認的方法。
本發(fā)明采用以下方案實現(xiàn):基于雙向鏈表的消息多線程消費順序確認的方法,所述方法包括以下步驟:
步驟S1、創(chuàng)建雙向鏈表,隊列節(jié)點維護自身處理狀態(tài)和對應(yīng)消息的偏移量;
步驟S2、主服務(wù)從消息中心中拉取消息;
步驟S3、取得消息后,先入雙向鏈表尾部,再將消息提交至本地線程中執(zhí)行;
步驟S4、本地業(yè)務(wù)邏輯將消息處理完成后,通知雙向鏈表對應(yīng)節(jié)點,更新狀態(tài);
步驟S5、雙向鏈表的隊列頭部被更新后出隊列,提交offset,并判斷新的隊列頭部的狀態(tài);直至遇到state是未完成的head時阻塞。
進一步的,所述步驟S4進一步具體為:待處理業(yè)務(wù)服務(wù)完成消息消費后,異步通知雙向鏈表,雙向鏈表更新狀態(tài),狀態(tài)為完成消費。
進一步的,所述步驟S5進一步具體為:雙向鏈表等待節(jié)點接受處理完成通知變更狀態(tài),并判斷當前節(jié)點是否頭部節(jié)點及其狀態(tài),決定是否出隊;是,則同時完成消息應(yīng)答確認,否,則未完成消息應(yīng)答確認。
本發(fā)明還提供基于雙向鏈表的消息多線程消費順序確認的裝置,包括創(chuàng)建模塊、拉取消息模塊、執(zhí)行模塊、通知模塊和提交模塊,所述創(chuàng)建模塊,即創(chuàng)建雙向鏈表,隊列節(jié)點維護自身處理狀態(tài)和對應(yīng)消息的偏移量;所述拉取消息模塊,即主服務(wù)從消息中心中拉取消息;所述執(zhí)行模塊,即取得消息后,先入雙向鏈表尾部,再將消息提交至本地線程中執(zhí)行;所述通知模塊,即本地業(yè)務(wù)邏輯將消息處理完成后,通知雙向鏈表對應(yīng)節(jié)點,更新狀態(tài);所述提交模塊,即雙向鏈表的隊列頭部被更新后出隊列,提交offset,并判斷新的隊列頭部的狀態(tài);直至遇到state是未完成的head時阻塞。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于福建天晴數(shù)碼有限公司,未經(jīng)福建天晴數(shù)碼有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110612637.6/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 上一篇:一種長線纜卷線設(shè)備
- 下一篇:一種色選機用噴閥裝置
- 多線程應(yīng)用系統(tǒng)的異常處理方法和異常處理裝置
- 一種面向片上網(wǎng)絡(luò)的多線程調(diào)度實現(xiàn)方法
- 基于計算機多線程多核顯微鏡細胞圖像快速掃描處理方法
- 一種基于同步鎖的多線程處理方法、終端以及存儲介質(zhì)
- 多線程并發(fā)處理系統(tǒng)及方法
- 海外控股估值流程控制方法、裝置、計算機設(shè)備及存儲介質(zhì)
- 讀數(shù)方法、電子裝置、計算機設(shè)備及存儲介質(zhì)
- 一種基于云平臺多線程調(diào)度的方法、系統(tǒng)、設(shè)備及介質(zhì)
- 一種基于云平臺的前端多線程調(diào)度方法和系統(tǒng)
- 多線程調(diào)度方法、裝置、電子設(shè)備及存儲介質(zhì)





