liuyangming / ByteTCC

ByteTCC is a distributed transaction manager based on the TCC(Try/Confirm/Cancel) mechanism. It’s compatible with the JTA specification. User guide: https://github.com/liuyangming/ByteTCC/wiki
https://www.bytesoft.org/
GNU Lesser General Public License v3.0
2.9k stars 911 forks source link

try方法的幂等性问题 #104

Open wangxinheiniu opened 5 years ago

wangxinheiniu commented 5 years ago

请问try方法没有幂等性的保证吗?举个例子,调用try方法时网络畅通,当try执行完成后,网络输出结果给调用方时发生网络抖动,如果此时触发ribbon的重试机制,那么try方法会被又一次调用且网络正常调用成功,如果扣库存或锁定库存会发生两次,这种情况应该怎么处理呢?

liuyangming commented 5 years ago

Try阶段是业务阶段,控制权仍然在业务系统手中。byteTCC无从判断两次请求到底是因timeout等原因而由框架发起的重复请求还是因业务需要而由业务系统发起的两次真实的请求。因此,业务阶段(Try)的幂等性只能由业务系统自行控制。