欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

聊聊業(yè)務系統(tǒng)中投遞消息到mq的幾種方式-創(chuàng)新互聯(lián)

背景

電商中有這樣的一個場景:

在平南等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站建設 網(wǎng)站設計制作按需定制設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站制作,全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站制作,平南網(wǎng)站建設費用合理。
  1. 下單成功之后送積分的操作,我們使用mq來實現(xiàn)
  2. 下單成功之后,投遞一條消息到mq,積分系統(tǒng)消費消息,給用戶增加積分

我們主要討論一下,下單及投遞消息到mq的操作,如何實現(xiàn)?每種方式優(yōu)缺點?

方式一

step1:start transaction
step2:生成訂單
step3:投遞消息到mq
step4:commit transaction

這種方式是將發(fā)送消息放在了事務提交之前,可能存在的問題:

step3發(fā)生異常

導致step4失敗,下單失敗,直接影響到下單業(yè)務

step4發(fā)生異常,其他step成功

下單失敗,消息投遞成功,給用戶增加了積分

方式二

我們將發(fā)送消息放到事務之后進行:
step1:start transaction
step2:生成訂單
step3:commit transaction
step4:投遞消息到mq

可能會出現(xiàn)的問題:
step4發(fā)生異常,其他step成功

導致下單成功,投遞消息失敗,用戶未增加積分

上面兩種是比較常見的做法,也是最容易出錯的。

方式三

step1:start transaction
step2:生成訂單
step3:本地庫中插入一條需要發(fā)送消息的記錄t_msg_record
step3:commit transaction
step5:新增一個定時器,輪詢t_msg_record,將待發(fā)送的記錄投遞到mq中

這種方式借助了數(shù)據(jù)庫的事務,業(yè)務和消息記錄作為了一個原子操作,業(yè)務成功之后,消息日志必定是存在的。解決了前兩種方式遇到的問題。如果我們的業(yè)務系統(tǒng)比較單一,可以采用這種方式。

對于微服務化的情況,上面這種方式不是太好,每個服務都需要上面的操作;也不利于擴展。

方式四

增加一個消息服務消息庫,負責消息的落庫、將消息發(fā)送投遞到mq。

step1:start transaction
step2:生成訂單
step3:當前事務庫插入一條日志:生成一個唯一的業(yè)務id(bus_id),將bus_id和訂單關聯(lián)起來保存到當前事務所在的庫中
step4:調(diào)用消息服務:攜帶bus_id,將消息先落地入庫,此時消息的狀態(tài)為待發(fā)送狀態(tài),返回消息id(msg_id)
step5:commit transaction
step6:如果上面都成功,調(diào)用消息服務,將消息投遞到mq中;如果上面有失敗的情況,則調(diào)用消息服務取消消息的發(fā)送

能想到上面這種方式,已經(jīng)算是有很大進步了,我們繼續(xù)分析一下可能存在的問題:

  1. 系統(tǒng)中增加了一個消息服務,下單操作依賴于該服務,業(yè)務對改服務依賴性比較高,當消息服務不可用時,整個業(yè)務將不可用。
  2. 若step6失敗,消息將處于待發(fā)送狀態(tài),此時業(yè)務方需要提供一個會查接口(通過bus_id查詢),驗證業(yè)務是否執(zhí)行成功;消息服務需新增一個定時任務,對于狀態(tài)為待發(fā)送狀態(tài)的消息做補償處理,檢查一下業(yè)務是否處理成功;從而確定消息是投遞還是取消發(fā)送
  3. step4依賴于消息服務,如果消息服務性能不佳,會導致當前業(yè)務的事務提交時間延長,容易產(chǎn)生死鎖,并導致并發(fā)性能降低。我們通常是比較忌諱在事務中做遠程調(diào)用處理的,遠程調(diào)用的性能和時間往往不可控,會導致當前事務變?yōu)橐粋€大事務,從而引發(fā)其他故障。

方式五

在以上方式中,我們繼續(xù)改進,進而出現(xiàn)了更好的一種方式:

step1:生成一個全局唯一業(yè)務消息id(bus_msg_id),調(diào)用消息服務,攜帶bus_msg_id,將消息先落地入庫,此時消息的狀態(tài)為待發(fā)送狀態(tài),返回消息id(msg_id)
step2:start transaction
step3:生成訂單
step4:當前事務庫插入一條日志(將step3中的業(yè)務和bus_msg_id關聯(lián)起來)
step5:commit transaction
step6:分2中情況:如果上面都成功,調(diào)用消息服務,將消息投遞到mq中;如果上面有失敗的情況,則調(diào)用消息服務取消消息的發(fā)送

方式五和方式四對比,比較好的一個地方:將調(diào)用消息服務,消息落地操作,放在了事務之外進行,這點小的改進其實算是一個非常好的優(yōu)化。

總結(jié)

  1. 若我們的系統(tǒng)系統(tǒng)比較小比較單一簡單,建議采用方式三
  2. 若我們的系統(tǒng)采用微服務的方式,建議使用方式五
  3. 你們的系統(tǒng)中如何發(fā)送消息的,大家可以留言,我們一起討論,一起進步。

mq系列整個內(nèi)容

  1. 聊聊mq的使用場景
  2. 聊聊業(yè)務系統(tǒng)中投遞消息到mq的幾種方式
  3. 如何確保投遞消息一定成功?
  4. 聊聊消息消費的幾種方式
  5. 如何確保消息至少消費一次
  6. 如何保證消息消費的冪等性

路人甲Java,只生產(chǎn)干貨,公眾號:javacode2018,喜歡的關注一下。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網(wǎng)頁名稱:聊聊業(yè)務系統(tǒng)中投遞消息到mq的幾種方式-創(chuàng)新互聯(lián)
文章地址:http://www.chinadenli.net/article14/dhoige.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作小程序開發(fā)網(wǎng)頁設計公司App開發(fā)網(wǎng)站收錄網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設