Loading... # [onlineMall 基于 springboot + dubbo + redis + rocketmq的分布式秒杀系统](https://github.com/susdevlop/onlineMall "https://github.com/susdevlop/onlineMall") - 开发环境 ``` jdk17 mysql8.0.24 springboot 3.3.3 dubbo 3.2.7 zookeeper 3.9.3 redis 7.4.2 rocketmq 5.1.3 react 18 unocss 0.61.0 vite 6.0.5 antd 5.18.1 ``` ### 各服务信息 - 8041 网关服务om-gateway: 负责所有请求的转发,以及限流、jwt鉴权等功能。 qos端口:11111 - 8045 缓存服务om-cache: dubbo端口:12343 qos端口:22222 redis 缓存服务、悲观锁 - 8042 用户服务om-user: 用户管理 dubbo端口:12345 qos端口:33333 - 8043 商品服务om-goods: 商品管理、库存管理 dubbo端口:12347 qos端口:44444 - 8044 订单服务om-order: 负责订单生成等 dubbo端口:12346 qos端口:55557 - 8046 队列服务om-mq: rocketmq做秒杀订单队列和未付款恢复订单状态,启动时将会自动初始化生成 topic dubbo端口:12344 qos端口:55558 - 数据库代码生成工具om-db-generator: 我的做法每次使用前commit 代码,然后使用后通过 commit去审阅需要更新的部分 - 基础通用模块om-common: config 配置和各种工具类和到处借鉴来但未使用的工具类 - 前端文件 om-frontend: react18 + vite写的极其简陋界面 qos端口:随便改没用上的端口 # 主要参考来源,参考作用巨大: - <https://github.com/Grootzz/dis-seckill/> - <https://blog.csdn.net/itScholar001/article/details/139231930> - <https://blog.csdn.net/qq_63211416/article/details/136142080> rocketmq使用一键部署 docker: - <https://hub.docker.com/r/xuchengen/rocketmq> bin文件夹内文件用于解决启动 springboot 时报的错误: ``` The Apache Tomcat Native library could not be found using names [tcnative-2, libtcnative-2, tcnative-1, libtcnative-1] on the java.library.path ``` Controller:限流 + 预减库存 使用令牌桶限制请求频率。 拿到令牌后,去 Redis 原子预减库存。 如果库存 >= 0,说明有资格下单,进入下一个步骤。 RocketMQ 队列中异步处理: 校验用户是否已经下过订单(Redis + DB 双查都可以)。 如果没有,则调用 orderService.newOrder(...)。 在 newOrder 中用 乐观锁真正减库存。 减库存失败后,回补 redis 库存 下单成功后,将订单信息写入 Redis 和数据库。 下单后没有付款或下单失败时,用 version 乐观锁回补库存 定时任务更新恢复的回补的库存状态(这里感觉逻辑糟糕) 前端轮询下单状态接口 项目地址:[https://github.com/susdevlop/onlineMall](https://github.com/susdevlop/onlineMall "https://github.com/susdevlop/onlineMall") 最后修改:2025-04-14 © 允許規範轉載 讚賞 讚賞作者 支付宝微信 赞 如果覺得我的文章對你有用,請隨意讚賞