Closed yuxiao97 closed 5 years ago
ByteTCC-sample只是一个样例演示如何使用Confirm/Cancel,实际上完全可以在Try中直接increase,然后在cancel时做decrease。只是这样就用不着confirm了,没有达到演示confirm的目标。ByteTCC-sample为了演示confirm/cancel调整成这样,作为业务不一定是合理的。业务系统该如何使用TCC需要业务系统自行规划。
另外,对你所问cancel是不是try的反向操作,这个问题回答是肯定的。全局事务回滚的情况下,首先还是依赖本地事务对try操作的回滚。然而,因为全局事务涉及跨库、跨应用操作,全局事务回滚时这些服务的try操作可能已经提交,这时就需要回调他们相应的cancel操作用以回撤其try操作已造成的影响,这是由TCC机制决定的。
请问confirm和cancel方法注解在类级别上,若AccountServiceImpl存在两个不同业务的方法需要不同的confirm和cancel时,如何注解?
@Compensable上指定的是当前TCC服务的确认&取消逻辑对应的beanId,对于interfaceClass指定接口上的每一个方法,其确认/取消bean上对应方法就是其确认/取消逻辑。
从示例代码中了解到,cancel阶段执行的东西是try中的反向操作,如下图所示
Try
Cancel
对此实现表示怀疑,难道仅仅是这样的反向操作来达到所谓的“事务性”吗?望作者不吝赐教!