RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)

打开reids在windows下的服务器,清楚里面localhost里面的数据
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第1张图片

重新设置一下任务计划,
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第2张图片

在这个系统里面的创建订单 的这个流程可能会出现问题,订单创建后,添加到数据库中(比如包含收货人信息电话啥的),比如下订单模块一秒能处理1000个请求,但是录入数据库模块一秒只能处理200个,服务器有限的情况下,没法做多集群,没办法拓展,这个时候就出现了等待阻塞,客户端也会等待很久。

这个时候,队列就起到作用了。 秒杀完把用户信息丢到队列里。然后在队列里面满满消费这些信息,通过队列进行限流,削峰。
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第3张图片
这个时候往MQ队列里面投数据的,前面的操作在这里就成了生产者。然后后面来消费

操作:
加入mq依赖
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第4张图片

配置yml文件
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第5张图片
写方法
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第6张图片
在实现类自动注入RabbitTemplate
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第7张图片
既然有这个rabbitTemplate模板了,就要写他的配置类;了。
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第8张图片
三个方法注入
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第9张图片
注意,第一个方法头上也要@bean
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第10张图片
继续回到实现类,现在先创建一个实体类,用于传输订单信息。
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第11张图片
这样生产者就建好了
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第12张图片
现在来创建消费者,同样的创建实体
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第13张图片
队列绑定:
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第14张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第15张图片
在配置类里面配置消费者

首先,Rabbit配置类类继承接口
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第16张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第17张图片
有了上图第三个重写的方法之后,就可以对jackson进行转换。
继续回在这里插入图片描述去写实现类

RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第18张图片
basicAck之后添加到数据库里面,需要一个mapper,用于先查询,然后插入。
创建一个接口(写方法用的)
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第19张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第20张图片
回到实现类

RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第21张图片
添加完了之后,要返回订单编号
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第22张图片
这样订单就生成了。

现在来完善CheckOrder(用于点击生成订单后,显示用户住址等其他信息)。
现在的逻辑是生成订单,放在 队列中等待消费,(消费者点击生成订单后进入等待时间)消费者在队列中取数据来消费,等消费完之后(也就是订单成功添加到数据库以后),再来显示订单信息页面

创建OrderService
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第23张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第24张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第25张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第26张图片

RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第27张图片

RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第28张图片

现在就完成之前的目的了:生成订单指令放在队列中,满满消费。消费完成添加到数据库中,然后显示订单详情页面

然后如何实现限流?
修改yml文件:
设置prefetch:抓举量:比如每次每个消费者一次性最多消费10条,哪怕有100个订单塞过来了而且我有能力一下处理100个,我也只让他消费10条。
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第29张图片

在进行Jmeter压力测试时候出了问题,订单编号返回数据类型不一致
在这里插入图片描述
修改,在生产者添加订单编号
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第30张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第31张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第32张图片

现在来设置另外一条限流属性:并发量

RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第33张图片
RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量)_第34张图片

你可能感兴趣的:(RabbitMQ+Redis+SpringBoot完善商品秒杀系统,限流功能实现(prefetch抓举量,concurrency并发量))