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