订单流程业务
2021-05-12 21:09:57 0 举报
订单基本流程,借助redisson,redis,RabbitMQ实现
作者其他创作
大纲/内容
创建订单
B尝试加锁
获取请求中的cookie解析jWT
N
将Token存入redis
提示用户刷新订单
返回查询信息
返回信息提示用户库存不足
Y
拦截器Interceptor
使用ThreadLocal将userId传给后续服务
有无选中商品
发送异步消息立马解锁库存
用户选择提交订单
解锁A
返回订单创建失败
生成订单号IdWorker.getIdStr()保证订单幂等性
feign:获取清单中的sku查询数据库计算实时总价
redis中记录订单锁定的仓库Id及商品件数
是否登录有无userId
feign:根据购物车Sku查询sku信息
获取登录用户购物车
redisson获取锁B
获取userId
拦截用户请求
feign:获取用户信息及收获地址
直接返回提示用户未选中任何商品
验库存锁库存保证原子性
取出订单确认页生成的Token
保证Token查询删除的原子性,防止并发下多个用户创建相同的订单解决:使用lua脚本,分布式锁
删除redis中的对应的Token,防止用户重复提交
toOrder
用户点击去结算
A尝试加锁
redisson获取锁A
解锁B
判断价格是否相等
feign:根据skuId查询库存
submit
异步redis记录订单信息,方便回滚
redis中有无此Token
返回提示用户重复提交订单
库存是否足够
查询仓库
锁定库存(update)
0 条评论
下一页