
文章插图
执行流程:
- 业务系统调用支付平台支付接口,并在本地进行记录,支付状态为支付中 。
- 支付平台进行支付操作之后,无论成功还是失败,都需要给业务系统一个结果通知 。
- 如果通知一直失败则根据重试规则进行重试,达到最大通知次数后,不再通知 。
- 支付平台提供查询订单支付操作结果接口 。
- 业务系统根据一定业务规则去支付平台查询支付结果 。
④补偿事务 TCC
TCC,Try-Confirm-Cancel 的简称,针对每个操作,都需要有一个其对应的确认和取消操作 。
当操作成功时调用确认操作,当操作失败时调用取消操作,类似于二阶段提交,只不过是这里的提交和回滚是针对业务上的,所以基于 TCC 实现的分布式事务也可以看做是对业务的一种补偿机制 。
TCC 的三阶段:
- Try 阶段:对业务系统做检测及资源预留 。
- Confirm 阶段:对业务系统做确认提交,Try 阶段执行成功并开始执行 Confirm 阶段时,默认 Confirm 阶段是不会出错的 。即:只要 Try 成功,Confirm 一定成功 。
- Cancel 阶段:在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放 。
比如下一个订单减一个库存:

文章插图
执行流程:
- Try 阶段:订单系统将当前订单状态设置为支付中,库存系统校验当前剩余库存数量是否大于 1,然后将可用库存数量设置为库存剩余数量 -1 。
- 如果 Try 阶段执行成功,执行 Confirm 阶段,将订单状态修改为支付成功,库存剩余数量修改为可用库存数量 。
- 如果 Try 阶段执行失败,执行 Cancel 阶段,将订单状态修改为支付失败,可用库存数量修改为库存剩余数量 。
基于 TCC 实现的分布式事务框架:
- ByteTCC,github.com/liuyangming
- tcc-transaction:github.com/changmingxi
【终于有人把“分布式事务”说清楚了】
推荐阅读
- 梦见有人要抓我是什么意思 梦见有人要抓我我逃跑
- 梦见睫毛被别人拔了 梦到自己把睫毛拔掉了
- vivo|开机键终于不再“身兼数职”:vivo展示X Fold内外屏3D超声波指纹解锁
- 梦见自己放火是什么征兆 做梦有人故意放火
- 二氧化碳的捕获与应用 日前,科学家发明了一项技术,可以把二氧化碳
- 把PPT转换为Word文档
- 梦见自己用脚把蛇踩死也被蛇咬断手指是什么意思 梦见自己用脚把蛇踩死了,有血
- 有钢圈的文胸把钢圈拆了 内衣钢圈断了还能穿吗
- 喝红茶,把你的胃养起来!
- 适当的喝红茶,会给我们带来健康!
