在电商产品中,支付用的第三方支付,产品只负责调支付接口,如果既想得到较好的用户购物体验,又想避免商品多卖现象,应该如何控制和锁定商品库存?
多卖商品是好事呀。
下单之后库存就应该有变化的,如果在规定的时间内未付款增加库存
支付完成后对库存进行更新,更新库存在事务中进行同时加锁,加的锁要避免堵塞,支付失败或者支付异常回滚,重新更新库存
什么时候锁都可以.也都有问题.
总的来说无非2种.支付前锁库存.支付成功锁库存.
至于选择哪种方式.需要中和分析.比如有的是支付前锁库存.但是订单半小时未支付的自动取消释放库存.
你可以用消费者模式,来设计和开发这个下订单和更新库存的问题。思路如下:
客户:生产者,负责下订单给网站后台,提交请求为异步方式,并且提交到后台消息队列中,比如RabbitMQ等。
网站后台:消费者,负责定时处理前台传入到消息队列中的订单信息。步骤如下:
1. 首先检查商品的后台库存是否满足客户的订单要求,如果满足则处理,并且处理完毕后要及时更新商品的库存数量,和更新客户订单的状态。
2. 如果不满足,则提前退出当前客户订单的处理,并且更新订单的处理结果为失败状态和失败原因。
逻辑如下:
支付成功减少库存。
如库存不足返回失败,并通知管理员。