分步式事务
分布式事務(wù)場景: 不同系統(tǒng),不同數(shù)據(jù)庫
例如,外賣點(diǎn)單后提交,就有訂單系統(tǒng) 和 配送系統(tǒng)。
分步式事務(wù)問題:
配送調(diào)度接口調(diào)用成功,但訂單系統(tǒng)數(shù)據(jù)庫事務(wù)提交失敗
配送調(diào)度接口調(diào)用超時,但訂單系統(tǒng)數(shù)據(jù)庫事務(wù)回滾
?
分布式事情Base
Bese 模型反ACID,完全不同于ACID模型
核心思想: 無法做到強(qiáng)一致性,但是可以根據(jù)業(yè)務(wù)場景,保證最終一致性
?
例如: 可以先把訂單數(shù)據(jù)存下來,然后再利用MQ 配置調(diào)度系統(tǒng) 實(shí)現(xiàn)分步式事務(wù)
?
Rabbit MQ 5個重要概念
生產(chǎn)者: 發(fā)步消息到MQ中
消費(fèi)者: 消費(fèi)隊列中的消息
Exchange: 消息交換機(jī)制???可以把數(shù)據(jù)存儲在一個Queue里,也可以配置在2個Queue里
Bind : 配置
?
問題:
1. 發(fā)送MQ失敗怎么辦?
建立一張MQ信息表存儲MQ中發(fā)送的信息,MQ信息表和Order 表的存儲放到一個事務(wù)中,
MQ發(fā)送成功之后,要更新MQ信息表中的狀態(tài)。 如果發(fā)送失敗?手工處理
2. 發(fā)送重復(fù)怎么辦?
冪等性,依賴主鍵,例如在配送表,以訂單表為主鍵,如果一個訂單發(fā)送多次,自然是失敗的
3. 接收者處理失敗怎么辦
接收者處理成功: 刪除Queue中的信息
接收者處理失敗: 不刪除Queue中的信息,報警信息
總結(jié)
- 上一篇: Spring Boot + Swagge
- 下一篇: 企业级API网关