// 原始的MySQL同步流程
// 判断此代金券是否加入抢购
SeckillVouchers seckillVouchers = seckillVouchersMapper.selectVoucher(voucherId);
AssertUtil.isTrue(seckillVouchers == null, “该代金券并未有抢购活动”);
// 判断是否有效
AssertUtil.isTrue(seckillVouchers.getIsValid() == 0, “该活动已结束”);
// 插入数据库
seckillVouchersMapper.save(seckillVouchers);
在订单生成时直接扣库存,这是最原始的扣库存方案,比较简单,但存在
问题
-
可能导致很多订单把产品库存扣除而未支付,这就需要有一个后台脚本,将一段时间内没有支付的订单的库存释放,把订单取消
-
即时扣库存,并发差
1、3步商品服务,操作商品服务的 db,2、4步订单服务,操作订单服务的 db。
避免访问不同服务的 db,原则上同一服务只能操作自身服务的 db。
首先考虑只将第4步异步。
分析
2,4都是操作db,第4步不再等待,1、2、3成功后立即反馈给用户。
之后通过消息通知服务异