Java秒杀项目——第六章 rabbitmq秒杀接口优化

主要内容:

1 、rabbitMq安装与SPringboot集成
2 、nginx水平扩展
3 、压测

6.1 接口秒杀优化

思路:
1、系统初始化,商品库存量加载到redis
2、收到请求,redis预先减少库存,库存不足直接返回失败。
3、请求入队,立即返回排队中
4、异步请求出队,生成订单,减少库存。
5、客户端通过轮询,是否秒杀成功。

6.2 安装rabbitmq

安装erlang -> 安装rabbitmq
vi /etc/profile: 修改环境变量 使erlang和rabbitmq添加到环境变量

6.3 springboot集成rabbitmq

1、添加依赖 spring-boot-starter-amqp,添加配置
2、创建消息消费者
3、创建消息生产者

添加的配置 requeue-rejected=true 表示处理失败是否重新进入队列
rety 充实参数
MqConfig新建一个队列
MqReceiver: 使用注解@RabbitLisetner(queue=“qeueu”)
MqSender: 自动注入AmqpTempalte注入, amqpTemplate.converAndsend(“queue”, msg) 消息入队

6.4 四种交换机模式

解决guest远程访问 在etc目录下新建配置文件 .config
Direct模式 直接指定队列完整名称
Topic模式 部分匹配主题 入队amqpTempalte.converAndSend(Exchange, router_key, msg)
消费:BindingBuilder.bind(topicQueue2()).to(topicExchange()).with(“topic.#”) #匹配0或1一个以上字符,*匹配一个字符。 通配符模式
Fanout模式 广播模式 一个消息发布到多个队列中 多点模式
Headers模式:同事满足才能放入queue里面,往队列发送message对象,成员properties的headers需要与Bing的Headers完全一致。(给消息添加headers并且需要headers完全一致)。

6.5 秒杀接口优化

改成异步下单,减少数据库的访问。
改代码 mybatis 在insert后会自动填充domain对象的id
写客户端轮询接口。
goodIsOver在redis缓存,通过商品id获取,如果已经秒杀完了,则获取-1,没有则获取0.

6.6 秒杀接口优化

商品库存被秒空的时候,使用一个hashmap存放布尔标记,下次访问先直接尝试从内存中读取。减少了redis访
问的开销,使用内存存放。
在交给spring的前后做一些初始化:
1、实现接口@RequestMapping("/miaosha")
public class MiaoshaController implements InitializingBean
2、重写方法: public void afterPropertiesSet() throws Exception

6.7 压力测试对比

Up_stream 配置nginx负载均衡。
lvs负载均衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值