{"id":20672695,"url":"https://github.com/zerowdd/seckill_parent","last_synced_at":"2025-04-19T19:11:18.602Z","repository":{"id":37154411,"uuid":"208043195","full_name":"ZeroWdd/seckill_parent","owner":"ZeroWdd","description":"基于springboot+springcloud的高并发和商品秒杀项目，通过redis，rabbitmq等技术实现秒杀的高并发。","archived":false,"fork":false,"pushed_at":"2022-06-17T02:31:58.000Z","size":5175,"stargazers_count":69,"open_issues_count":5,"forks_count":23,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-03-04T07:06:38.072Z","etag":null,"topics":["idea","mybatis","mysql","rabbitmq","redis","seckill","springboot","springcloud"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZeroWdd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-12T12:13:18.000Z","updated_at":"2023-02-19T07:41:55.000Z","dependencies_parsed_at":"2022-08-02T13:01:48.583Z","dependency_job_id":null,"html_url":"https://github.com/ZeroWdd/seckill_parent","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeroWdd%2Fseckill_parent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeroWdd%2Fseckill_parent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeroWdd%2Fseckill_parent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeroWdd%2Fseckill_parent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZeroWdd","download_url":"https://codeload.github.com/ZeroWdd/seckill_parent/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224970172,"owners_count":17400294,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["idea","mybatis","mysql","rabbitmq","redis","seckill","springboot","springcloud"],"created_at":"2024-11-16T20:38:32.163Z","updated_at":"2024-11-16T20:38:32.690Z","avatar_url":"https://github.com/ZeroWdd.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 电商项目秒杀系统实战\n\n## 初始\n\n大三学生准备实习找工作，写下这个小项目。\n\n项目秒杀系统封装还不算太好，后续打算写一个商城项目并运用其中进行二次开发。\n\n希望喜欢的同学能给个star，谢谢。\n\n## 开发工具 \n\nIntelliJ IDEA \n\n## 开发环境\t\t\t\t\n\n| JDK  | Maven | Mysql | SpringBoot    | springcloud | Redis | RabbitMQ |\n| ---- | ----- | ----- | ------------- | ----------- | ----- | -------- |\n| 1.8  | 3.5.2 | 5.7   | 2.0.4.RELEASE | Finchley.M9 | 3.2   | 3.7.14   |\n\n## 使用说明\n\n1. 下载代码 git clone https://github.com/ZreoWdd/seckill_parent.git 将项目下载到IDEA里面\n2. 运行sql文件夹下的sql文件\n3. 到src/main/resources下的application.yml下修改你的数据库链接用户名与密码\n4. 安装redis、mysql、rabbitmq、maven等环境\n5. 启动前，检查配置 application.yml 中相关redis、mysql、rabbitmq地址\n\n## 秒杀的业务特点\n\n1、瞬时并发量大：大量用户会在同一时间抢购，网站流量瞬间激增。\n\n2、库存少：一般都是低价限量，而访问的数量远远大于库存数量，只有极少数人成功。\n\n3、业务流程简单：流程短，立即购买，下订单，减库存。\n\n4、前期预热：对于还未开启活动的秒杀商品，以倒计时的方式显示，只能访问不能下单。\n\n## 设计思路\n\n![sign.png](assets/sign.png)\n\n1、限流：只能让秒杀成功的一小部分人进入到后台，和数据库进行交互，来减少数据库服务器的压力。\n\n2、缓存：将部分业务逻辑写到缓存里，例如：商品限购数量、秒杀政策等。\n\n3、异步：将业务逻辑拆分，减少服务器压力，例如：正常业务流程是下订单、付款、减库存同一时间完成，秒杀时可以将业务逻辑拆分。\n\n4、预热：商家进行宣传，并提前设置好秒杀的商品、秒杀时间、限购数量，将设置的商品写入 redis 缓存。\n\n5、展示：页面分为两层，第一层是商品列表页，第二层是商品详情页，通过商品列表页链接进入商品详情页，秒杀开始前，展示商品秒杀倒计时，不允许操作提交订单，只允许查看商品详情。秒杀开始时，展示商品秒杀到期时间。\n\n6、提交订单：秒杀提交完订单将 redis 缓存里的数量减少，并提示支付。\n\n7、队列操作：当支付成功之后，将秒杀成功详情写入 rabbitMQ，订单服务进行监听接收消息写入订单，库存服务进行监听接收消息减少库存。\n\n8、时间服务器：页面服务端通过负载进行布署，各服务器时间可能会不一致，因此增加时间服务，来提供统一的时间。\n\n## 技术架构\n\n![架构](assets/架构.png)\n\n整体架构图：\n\nEureka Client：\n\n时间服务（leyouTimeServer，端口号8000）：为页面服务提供时间统一的接口。\n\n商品服务（leyouStock，端口号7000）：对外提供的接口（商品列表、商品详情、秒杀政策）。\n\n库存服务（leyouStorage，端口号6001）：队列监听，在队列中提取消息与数据库交互减少库存。\n\n会员服务（leyouUser，端口号5000）：为页面服务提供会员数据接口，会员的添加、修改、登录。\n\n订单服务（leyouOrder，端口号4000）：队列监听，在队列中提取消息与数据库交互生成订单。\n\n页面服务（leyouClient，端口号3000）：为前端页面提供数据接口。\n\nEureka Server：\n\n注册中心（leyouServer，端口号9000）各服务都在注册中心进行注册。\n\n配置中心 （leyouConfig）：提供所有服务需要的配置。\n\n\n\nRedis的应用：\n\n![redis](assets/redis.png)\n\n缓存商品数量、秒杀政策。\n\n商家对秒杀政策、商品限量进行设置，设置完成写入Redis。\n\n消费者访问商品详情，提交订单之后，从Redis中减少商品数量。\n\n\n\nRedis里存取内容：\n\n1、在政策新增的时候存入，key的值为：LIMIT_POLICY_{sku_id}，value的值为政策内容\n\n2、商品列表取数据时，通过key（LIMIT_POLICY_{sku_id}），取出政策内容。\n\n3、政策到期之后，自动删除。\n\n\n\nRabbitMQ的应用：\n\n![RabbitMQ](assets/RabbitMQ.png)\n\n消费者提交订单，自动写入订单队列：\n\n订单队列：订单服务监听订单队列，接收到消息之后将队列信息写入数据库订单表。\n\n消费者付款之后，更新订单状态，更新成功之后写入库存队列\n\n库存队列：库存服务监听库存队列，接收到消息之后将库存信息写入数据库减少库存。\n\n## 数据库结构 \n\n![databaseTable.png](assets/databaseTable.png)\n\n## 项目描述\n\n1. 使用springcloud进行分布式，让多台服务器可以响应。\n2. 使用redis做缓存提高访问速度和并发量，减少数据库压力。\n3. 使用页面静态化，缓存页面至浏览器，前后端分离降低服务器压力。\n4. 使用消息队列完成异步下单，提升用户体验，削峰和降流。\n\n## 项目测试\n1. 新建秒杀政策\n\t地址 ： \u003chttp://localhost/seckillClient/page/limitPolicyPage.html\u003e\n\t\n\t![limitpolicyPage.png](assets\\limitpolicyPage.png)选择商品，输入秒杀价格、秒杀库存、开始时间、结束时间，点保存。\n\t\n\t![limitPolicypage2.png](assets\\limitpolicyPage2.png)\n\t\n2. 登录页面\n    地址：http://localhost/seckillClient/page/loginPage.html\n\n  ![limitPolicypage2.png](assets\\limitpolicyPage2.png)\n\n3. 商品列表页\n    地址：\u003chttp://localhost/seckillClient/page/stockListPage.html\u003e\n\n  ![stocklist.png](assets/stocklist.png)\n\n4. 商品详情页\n    地址：\u003chttp://localhost/seckillClient/page/stockDetailPage.html?sku_id=27359021557\u003e\n\n  ![stockpage.png](assets/stockpage.png)\n\n5. 提交订单\n    在商品详情页中点击【立即抢购】\n    地址：\u003chttp://localhost/seckillClient/page/createOrderPage.html?sku_id=27359021557\u003e\n\n  ![createorderpage.png](assets/createorderpage.png)\n\n6. 付款页面\n    在提交订单页面点击【提交订单】\n    地址：\u003chttp://localhost/seckillClient/page/payPage.html?order_id=1565061554849\u003e\n\n  ![createorderpage.png](assets/createorderpage.png)点击【微信支付】，提示“支付成功”\n\n  ![paysuccess.png](assets/paysuccess.png)\n\n  ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerowdd%2Fseckill_parent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzerowdd%2Fseckill_parent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerowdd%2Fseckill_parent/lists"}