伪代码
场景
用购买某种商品1件(原库存1000),增加20积分,扣除100元余额
设计说明
通过日志表来完成TCC。修改库存,余额表要先添加一条记录到他们的日志表里,表要记录TCC状态。
通过唯一业务Code去重,保证幂等。
没有抽象一个活动管理器来管理TCC。
服务
- 本地创建订单服务createOrder
- 本地插入订单Mapper层 insertOrder(orderCode)
- 本地其他服务
- 远程服务是否可以扣除库存ifReduceStock(orderCode,reduceNumber)
- 远程服务是否可以扣除余额ifReduceBalance(orderCode,sum)
- 远程服务Try扣除库存,锁住扣除库存tryReduceStock(orderCode,reduceNumber)
- 远程服务Try扣除余额,锁住扣除余额tryReduceBalance(orderCode,sum)
- 远程服务增加积分
- 远程服务Confirm扣除库存confirmReduceStock(orderCode,ReduceNumber)
- 远程服务Confirm扣除余额ConfirmReduceBalance(orderCode,sum)
- 远程服务Cancel扣除库存,取消占有资源cancelReduceStock(orderCode,ReduceNumber)
- 远程服务Cancel扣除余额,取消占有资源cancelReduceBalance(orderCode,sum)
- 远程服务增加积分
- 远程其他服务
补充服务:扣除日志超过timeOut时间的记录状态设置为失效Cancel(在是否扣除ifReduce,Confirm操作中调用补充服务)