• Stars
    star
    195
  • Rank 199,374 (Top 4 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

seckill-rocketmq-基于RocketMQ-电商高并发场景实战

seckill-rocketmq[基于RocketMQ-电商高并发场景实战]

场景为:示例项目以用户访问秒杀网关进行秒杀订单下单,平台通过RocketMQ对秒杀流量进行削峰填谷。用户通过主动查询订单 获取下单结果的完整业务流程,加深对RocketMQ的理解,并学会如何在实战场景下使用RocketMQ。

项目基本按照实际秒杀场景进行设计与编码,提供了充分的预校验逻辑,可以作为业务中开发的参考demo。

主要技术

消息队列(RocketMQ): 作用,长流程异步化,提升吞吐量,削峰填谷
    |-普通消息的发布及订阅
SpringBoot
    |-配置资源预加载
RestTemplate
    |-application/x-www-form-urlencoded格式数据的发送
H2
    |-嵌入式数据库

业务流程图

业务流程图如下

秒杀下单流程

秒杀下单

订单查询流程

订单查询

模块描述

模块 说明
seckill-rocketmq 父工程
seckill-gateway-service 秒杀收单网关,提供秒杀下单入口,提供用户主动查单接口
seckill-order-service 秒杀订单平台,通过整合RocketMQ,消费秒杀下单消息;提供内部订单查询实现
seckill-message-protocol 消息协议封装

业务描述

  1. 用户访问秒杀网关seckill-gateway-service,对感兴趣的产品发起秒杀操作。
  2. 网关对秒杀订单进行充分的预校验之后,将秒杀下单消息投递到RocketMQ中,同步给用户返回排队中
  3. 秒杀订单平台seckill-order-service订阅秒杀下单消息,对消息进行幂等处理,并对商品库存进行真实校验后,进行真实下单操作
  4. 用户通过秒杀网关seckill-gateway-service提供的查单进行对自己下的秒杀订单进行查询。

真实场景下,在下单前有绑定账号、绑定收货地址等操作;下单完成后还有支付、物流等操作。

本demo的重点在于如何在秒杀核心场景使用RocketMQ进行业务异步化及订单的压单操作,因此对于细节不予实现,敬请谅解。

注意:商品信息直接在初始化的时候记载到seckill-gateway-service,进行前置库存校验。此处依据缓存已经做了一次流量的过滤。

订单真实下单的时候,进行库存真实校验,此时请求量已经不大了,从而做到对核心资源(DB)的保护。

待优化

由于本项目主要目的在于使用RocketMQ进行削峰填谷,因此对于部分秒杀场景的业务处理尚未优化,此处列出待优化的点,供读者参考

  1. 分布式减库存:使用Redis的decr进行分布式原子减库存
  2. 预热库存时候将库存适当调大,防止恶意刷库存导致正常用户不能进行正常的秒杀订单投递
  3. 【注意点】数据库侧的库存校验万万不能少,本demo已经加上了该校验
  4. 秒杀接口需要做防刷处理,可以在前端通过倒计时方式定时开放接口、增加验证码减少下单频率、增加下单前校验收货地址等方式

windows下单点RocketMQ搭建

  1. 解压rocketmq-all-4.4.0-bin-release.zip到C盘根目录,或者某个盘的根目录(我是C盘)

     配置环境变量,增加环境变量
     ROCKETMQ_HOME=C:\rocketmq-all-4.4.0-bin-release(不要出现空格和中文)
    
  2. 启动nameServer

     mqnamesrv.cmd
    
  3. 启动broker

     start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
    
  4. 启动admin-console

     java -jar -Drocketmq.config.namesrvAddr=127.0.0.1:9876 rocketmq-console-ng.jar
    

windows下RocketMQ安装部署

H2后台地址

  1. 秒杀网关:http://localhost:8070/h2/
  2. 秒杀下单:http://localhost:8071/h2/

混合云支持

支持了ACL方式,编译打包后运行,云上envType为aliyun,线下envType为offline

网关
java -jar -DenvType=aliyun seckill-gateway-service-1.0.0.jar
下单
java -jar -DenvType=aliyun seckill-order-service-1.0.0.jar

下单之后进行订单查询,使用curl命令

curl http://127.0.0.1:8071/api/query.do -X POST -d  "userPhoneNum=15288888881&prodId=pid_0001"

More Repositories

1

redis-distributed-lock

redis分布式锁工具包,提供纯Java方式调用,支持传统Spring工程, 为spring boot应用提供了starter,更方便快捷的调用。
Java
312
star
2

shield-ratelimter

基于Redis的分布式限流组件,注解支持
Java
141
star
3

snowalker-shardingjdbc-demo

shardingjdbc3.x 整合,实现自定义主键生成,自定义分库分表策略,可扩展,可读性更好
Java
91
star
4

order-charge-notify

模拟电商下单->订单处理->订单结果通知的完整流程,基于RocketMQ进行实现
Java
63
star
5

lite-tracer

lite-tracer轻量级链路追踪系统,google-dapper个人实现。仅供学习研究
Java
39
star
6

shield-dubbo-tracer

基于dubbo2.6.4的Dubbo TraceId的设置/获取/传递工具包
Java
29
star
7

sheild-conf-single

sheild-conf配置中心单机版本,提供一站式配置服务及管理
CSS
20
star
8

shieldTXC

A Message based Distributed Transaction Framework
Java
19
star
9

shield-job

基于队列的任务调度及分发中间件,based on RocketMQ
Java
15
star
10

shield-rocketmq-client-spring

rocketmq client based on Spring framework
Java
9
star
11

shield-conf

shield,基于Dubbo-RPC的分布式配置服务中心
Java
8
star
12

todo-board

极客时间代码之丑作业题
Java
4
star
13

springboot-global-exception

springboot global exception handling
Java
3
star
14

Jobhunters

Jobhunters is a website to make students find jobs and let company find nice workers
Java
2
star
15

rocketmq-lib-enterprise

阿里云消息队列MQ封装,商业版RocketMQ
Java
2
star
16

SunOnlineWebsiteDevelopmentVersion

SunOnline Website Development Version
Java
2
star
17

e-point

e-point教师辅助点名
Java
2
star
18

Eclipse-plugin-Desktop-genius

eclipse桌面精灵插件
Java
2
star
19

grpc-demo

基于gRPC的报价服务案例,添加服务注册发现(基于Nacos)、双向流等场景。
Java
2
star
20

StudentManagementSystem

A system that can manage students' grades and message themselves
Java
2
star
21

lifeSharing-blog

micro blog with dubbox
CSS
2
star
22

Notepad_Java_version

notepad using Java,seems like OS's appearance
Java
1
star
23

taxuewwl.github.io

惟精惟一,允执厥中
HTML
1
star
24

question-board-kit

个人问题统计查询应用
JavaScript
1
star
25

Jexplorer

A explorer written by Java
Java
1
star