先上源码地址:https://github.com/HermanCho/seckill
项目总结
本项目基于慕课网的秒杀项目,源代码的参考很多来源于以下博客
改进的地方:(主要是前两个)
-
消息可靠性传输的实现,包括投递、持久化、消费 + 幂等性, 3 + 1 的实现
-
redis预减库存的库存补充方案
-
整合了log4j2,方便维护
-
进行了springboot版本升级整合。
源项目的版本太低,导致rabbitMQ很多问题,踩了不少坑。
-
交换机Direct模式改进为Fanout模式,效率更高。
-
验证码不合理,简单注释掉了相关的逻辑。毕竟抢单的时候,还要输验证码,体验极差
项目的完善思路:
-
秒杀不一定不允许重复秒杀,应该分两个表,一个唯一索引,另一个不限制
-
支付订单、取消订单的接口
其实这业务挺关键的,不过没时间写,后续有机会再实现吧
-
前端对未支付订单,启动计时器,到点触发取消订单接口。
-
前端对进行请求的订单,需要设置超时器。若超时仍未得到相关响应,就停止并提示。防止异常情况占用大量资源。
-
开启定时任务,扫描数据库,加载当天开启的秒杀任务,key有效期一天。
否则内存肯定不够用。(粒度可细到每小时)
-
各种key的过期时间设置。
推荐阅读顺序:
相关博文也可以从分类专栏进入。
没找到地方用分布式锁…但项目中还是实现了相关代码
附踩坑记录:
RabbitMQ 消费者如何获取生产者设置的correlationId + 得到CorrelationId为空的解决方案 + 源码解析
RabbitMQ 消费者确认auto 和 manual 模式对异常的处理区别(含重试、requeue的影响)
log4j2 输出指定单一日志级别(不是该级别及其以上!!!)
如果项目有相关问题,或文章有误,欢迎指出或讨论。