
secKill项目纠错/改进
DatDreamer
这个作者很懒,什么都没留下…
展开
-
secKill项目 --- 总结 + 推荐阅读顺序 + 源码地址
先上源码地址:https://github.com/HermanCho/seckill项目总结本项目基于慕课网的秒杀项目,源代码的参考很多来源于以下博客商城秒杀系统改进的地方:(主要是前两个)消息可靠性传输的实现,包括投递、持久化、消费 + 幂等性, 3 + 1 的实现redis预减库存的库存补充方案改进了 @AccessLimit的使用整合了log4j2,方便维护进行了springboot版本升级整合。源项目的版本太低,导致rabbitMQ很多问题,踩原创 2020-08-15 12:03:03 · 3508 阅读 · 1 评论 -
secKill项目 --- 限制同一用户只有一个请求生效 + 回补Redis库存如何反馈到内存标识的思考(有库存,买不到)
完成了redis的库存的补充,redis库存和数据库库存,现在已经可以保证最终一致性了。但这并不等同于项目的正确性。先来回顾一下秒杀控制器的逻辑(核心部分源代码,其余伪代码。)此处已实现库存补偿篇所说的优化 : 先检查重复秒杀,再预减库存 @RequestMapping(value="/{path}/do_miaosha",method=RequestMethod.POST) @ResponseBody public Result<Integer> doMiaosha() {原创 2020-08-15 11:14:48 · 1022 阅读 · 0 评论 -
secKill项目 --- Redis预减库存的存在的问题 及 库存补偿
本文建立在已完成可靠性传输的基础上,建议先阅读另一篇博文,不然可能难以理解。点击跳转先看看秒杀接口的源代码: @RequestMapping(value="/{path}/do_miaosha",method=RequestMethod.POST) @ResponseBody public Result<Integer> doMiaosha(Model model,MiaoshaUser user, @RequestParam(value="goodsId",defaultVal原创 2020-08-14 23:25:41 · 3475 阅读 · 1 评论 -
secKill项目 --- 可靠性传输的实现 及 易错点总结
本文只讨论可靠性传输相关的问题,预减库存的问题在另一篇博客:如何实现消息的可靠性传输,已在其他两篇博文中总结了,此处不赘述RabbitMQ实现可靠性传输 理论篇RabbitMQ实现可靠性传输 代码篇这里记录一下易错的,需要注意的点:消息的唯一ID是需要手动分配的,消息的持久化也是需要额外做的。两者都需要通过MessagePostProcessor完成限制重发次数交由定时任务完成。重发需要注意的点:超出限制后,记得移除redis中的相关key,并入库记录重发时,消息的co原创 2020-08-14 15:04:05 · 1486 阅读 · 1 评论 -
secKill项目 --- @AccessLimit用法的问题
先附上原本的代码:项目中,用了拦截器,用于简化限流判断@Servicepublic class AccessInterceptor extends HandlerInterceptorAdapter{ @Autowired MiaoshaUserService miaoshaUserService; @Autowired RedisService redisService; @Override public boolean preHandle(HttpServletRequest re原创 2020-07-24 15:29:41 · 1809 阅读 · 0 评论