mysql异步消息队列_秒杀系统之四:消息队列异步处理订单(RabbitMQ消息队列)

本文介绍了如何利用RabbitMQ消息队列实现订单的异步处理,以此减轻秒杀场景下数据库的压力。通过在用户秒杀成功后,将订单信息放入消息队列,后台再异步处理订单创建和库存扣减,降低了数据库的读写性能影响。同时,文章还提到了限制购买数量的方法,以及RabbitMQ的配置和使用。
摘要由CSDN通过智能技术生成

5. 消息队列异步处理订单

我们之前通过数据库中的乐观锁来控制超卖的问题,并且也通过Jmeter压力测试,那么如果并发量足够大,而且不对其进行限制那么对于接口,对于数据库和服务器都是一个很大的压力,此时,我们需要接口限流,我们通常使用令牌桶算法+乐观锁进行对高并发的限制,但是如果遇到爬虫进行不断的发送数据,这样也会比正常用户大概率秒杀到商品,此时我们需要隐藏接口、带MD5进行双向验证,和单用户限制发送请求的频率。

除了这些方法,实际上我们还可以对于下单的异步处理,我们之前提过,用户进行对商品秒杀的时候会在同一时间进行高并发的请求流量到服务器中,如果每个请求都立即访问数据库进行扣减库存+写入订单的操作,对数据库的压力是巨大的。

那这样我们可以通过RabbitMQ (消息队列)对我们数据库减轻压力:当"幸运儿"成功的将其的秒杀请求放到消息队列中,给其返回抢购成功,实际上用户并不关心自己的订单号马上返回,用户只关心自己是否能够成功抢购,所以对于生成订单号,减少库存等操作我们可以通过异步处理订单将数据写入数据库,比起多线程同步修改数据库的操作,大大缓解了数据库的连接压力,最主要的好处就表现在数据库连接的减少

同步方式:大量请求快速占满数据库框架开启的数据库连接池,同时修改数据库,导致数据库读写性能骤减。

异步方式:一条条消息以顺序的方式写入数据库,连接数几乎不变(当然,也取决于消息队列消费者的数量)。

79d9459c93bf

image-20200930102122309.png

5.1 配置RabbitMQ

导入RabbitMQ依赖和fastJson

org.springframework.boot

spring-boot-starter-amqp

com.alibaba

fastjson

1.2.73

使用Docker在服务器上安装rabbitMQ

# 获取最新的指定版本,该版本包含了web控制页面

docker pull rabbitmq:management

# 默认guest 用户,密码也是guest

docker run -d --name rabbit -p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值