项目要求:
1)预扣库存及时归还,关系到后来订单的下单成功
2)不同类型商品不同时长,如:商品1订单10分钟,商品2订单15分钟......
3)可伸缩性,根据并发量大小增加减少部署结点
4)并发量大单节点内部自扩展
5)结构简单,维护简单
主要流程
1、生成订单
2、生产一个消息(orderID,goodsNum)到rabbitmq
3、定时系统消费消息根据设计的indexcursor规则异步包装或处理job,若第3个步骤压力大,将处理job业务逻辑分离放入rabbitmq,从mq中消费
草图1:(满足不了要求4)
消费流程:
(1)当前格注册的job的cycleNum++
(2)cycleNum和offset都达到,set中的job执行。
(3)执行流程:推送到mq,改订单状态的线程消费完job,删除set和注册表中的job,执行三次,job转存到异常表,删除job,归还扣的库存。
生产流程:
用户线程要修改为:支付中,本线程要改为:交易关闭。若用户线程在前则不安全(只有待支付和支付失败,可以关单);
上草图2:满足要求4(根据并发量设计时间轮和Ringlist大小,job初始化数量)
系统初始化时,初始化轮和ringList(初始化大小100,哪个格子不够,扩充N个),同时每个ringList new job实力100个,避免异步时频繁增加/删除job,每次新订单任务来了,只setCycleNum,setOffset,setOrderId,setNum
增加开销:维护ringIndex,ringList中判断要覆盖的job实例:被处理直接set,否则下一个,ringList满了触发扩充
https://blog.csdn.net/xiaochu_chuxiao/article/details/80995341