本地消息表(异步确保)
本地消息表這種實(shí)現(xiàn)方式應(yīng)該是業(yè)界使用最多的,其核心思想是將分布式事務(wù)拆分成本地事務(wù)進(jìn)行處理,這種思路是來源于ebay。我們可以從下面的流程圖中看出其中的一些細(xì)節(jié):
?
基本思路就是:
消息生產(chǎn)方,需要額外建一個(gè)消息表,并記錄消息發(fā)送狀態(tài)。消息表和業(yè)務(wù)數(shù)據(jù)要在一個(gè)事務(wù)里提交,也就是說他們要在一個(gè)數(shù)據(jù)庫里面。然后消息會(huì)經(jīng)過MQ發(fā)送到消息的消費(fèi)方。如果消息發(fā)送失敗,會(huì)進(jìn)行重試發(fā)送。
消息消費(fèi)方,需要處理這個(gè)消息,并完成自己的業(yè)務(wù)邏輯。此時(shí)如果本地事務(wù)處理成功,表明已經(jīng)處理成功了,如果處理失敗,那么就會(huì)重試執(zhí)行。如果是業(yè)務(wù)上面的失敗,可以給生產(chǎn)方發(fā)送一個(gè)業(yè)務(wù)補(bǔ)償消息,通知生產(chǎn)方進(jìn)行回滾等操作。
生產(chǎn)方和消費(fèi)方定時(shí)掃描本地消息表,把還沒處理完成的消息或者失敗的消息再發(fā)送一遍。如果有靠譜的自動(dòng)對賬補(bǔ)賬邏輯,這種方案還是非常實(shí)用的。
這種方案遵循BASE理論,采用的是最終一致性,筆者認(rèn)為是這幾種方案里面比較適合實(shí)際業(yè)務(wù)場景的,即不會(huì)出現(xiàn)像2PC那樣復(fù)雜的實(shí)現(xiàn)(當(dāng)調(diào)用鏈很長的時(shí)候,2PC的可用性是非常低的),也不會(huì)像TCC那樣可能出現(xiàn)確認(rèn)或者回滾不了的情況。
優(yōu)點(diǎn): 一種非常經(jīng)典的實(shí)現(xiàn),避免了分布式事務(wù),實(shí)現(xiàn)了最終一致性。在 .NET中 有現(xiàn)成的解決方案。
缺點(diǎn): 消息表會(huì)耦合到業(yè)務(wù)系統(tǒng)中,如果沒有封裝好的解決方案,會(huì)有很多雜活需要處理。
總結(jié)
以上是生活随笔為你收集整理的本地消息表(异步确保)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 18.04 安装 ngin
- 下一篇: 阻容感基础09:电感器原理(1)-电感器