标签:失败 src 代码 第三方 区别 类型 三方 开发人员 开发
TCC将每个分支事务都分成三个部分(Try、Confirm、Cancel):
成功图例:
失败图例:
场景:A账户给B账户转30块,AB在不同的服务。
方案1:
A服务:
Try{
检查A账户余额是否大于30元。
A账户扣减30元。
}
Confirm{
空。
}
Cancle{
A账户增加30元。
}
B服务:
Try{
B账户增加30元。
}
Confirm{
空。
}
Cancle{
B账户扣减30元。
}
方案1存在的问题:
问题解决:
优化后的方案2:
A服务:
Try{
增加幂等性。
判断是否已经执行了Cancel。若Cancle已执行,则不执行Try,反之则执行Try。
检查A账户余额是否大于30元。
A账户扣减30元。
}
Confirm{
空。
}
Cancle{
增加幂等性。
判断是否已经执行了Try。若Try未执行,则不执行Cancel,反之则执行Cancel。
A账户增加30元。
}
B服务:
Try{
空。
}
Confirm{
增加幂等性。
B账户增加30元。
}
Cancle{
空。
}
由此我们可以发现使用TCC需要注意一些问题。
TCC本质上也是二阶段提交协议,但他们又有很大不同:
ByteTCC,TCC-transaction,Hmily。
标签:失败 src 代码 第三方 区别 类型 三方 开发人员 开发
原文地址:https://www.cnblogs.com/NEWHOM/p/12406326.html