分布式事务——使用消息队列消除两阶段提交


第一次发博文,略紧张。。。

 

核心:系统幂等性,记一个操作在系统中重复执行的结果是一样的。
场景:A账户转账给B账户1000块,A账户和B账户属于两个系统System-A和System-B
 1. System-A本地事务
  a. 开始本地事务
  b. A账户扣款1000
  c. 写入消息表
  d. 完成本地事务
 2. 中间消息系统
  a. 读取System-A中的未应用的消息
  b. 将消息发往System-B
 3. System-B本地事务
  a. 判断消息是否已经应用
  b. 若没有
   i. 开始本地事务
   ii. B账户增加1000
   iii. 写入消息应用表
   iv. 完成本地事物
  c. 若有
   i. 忽略消息
  d. 将应用消息发往System-A
 4. 中间消息系统
  a. 将System-A的消息状态更新

几种异常情况:
 1. System-A本地事务阶段失败
  a. System-A本地事务回滚
 2. 中间消息系统
  a. 读取System-A中的未应用的消息(挂掉),消息不会发送
  b. 将消息发往System-B发出之后挂掉
   i. System-B已经将事务执行,同时System-B接收到同样的消息,会忽略
 3. System-B本地事务阶段失败
  a. 事务成功消息不会写入消息应用表
  b. 若需要补偿,则向本地消息表中添加一条失败消息,由System-A进行补偿
 4. 中间消息系统更新状态失败
  a. 更新失败,消息将会重复发送

 

几种经典的分布式事务解决方案:

http://weibo.com/ttarticle/p/show?id=2309403965965003062676


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM