青训营课程笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天,今天主要学习了微服务框架与秒杀系统的制作。
秒杀业务
电商平台:目前消费者已经习惯多平台比价消费,基于各家玩法差异寻求最佳的购物选择,各大电商平台用户重合率不断增长更加增强市场竞争。
电商秒杀业务:秒杀的特点就是时间极短、 瞬间用户量大,明显的高并发的特点;同时会面对超发的问题以及有人通过恶意请求(脚本模拟炸机)。可以通过服务单一的方式,现在设计基本都是微服务的设计思想+分布式的部署方式,所以可以秒杀单独建立一个库,如果出现秒杀没抗住,那么秒杀库崩了,也不会影响其他业务。如果有人出现用脚本进行链接毫秒级抢购,那么可以将url动态化需要用到md5的加密方式生成随机数。
解决:针对可能出现炸库等问题,可以用redis集群的办法多搞几个redis进行主从同步+读写分离。或者可以通过换高性能的web服务器,比如nginx,通过多租几个服务器进行并发的分流。另外可以通过按键控制、前后端限流、库存预热的方式进行缓解。流程图如下:
秒杀系统制作:
秒杀系统的核心就是秒杀接口,首先就是MQ配置涉及到的application.yml配置:
rabbitmq:
####连接地址
host: 127.0.0.1
####端口号
port: 5672
####账号
username: guest
####密码
password: guest
### 地址
virtual-host: spike_host
listener:
simple:
retry:
####开启消费者(程序出现异常的情况下会)进行重试
enabled: true
####最大重试次数
max-attempts: 5
####重试间隔时间
initial-interval: 1000
####开启手动ack
acknowledge-mode: manual
default-requeue-rejected: false
接下来是mq的配置:
/**
* description: RabbitmqConfig 配置
* create by: YangLinWei
* create time: 2020/5/26 10:54 上午
*/
@Component
public class RabbitmqConfig {
// 添加修改库存队列
public static final String MODIFY_INVENTORY_QUEUE = "modify_inventory_queue";
// 交换机名称
private static final String MODIFY_EXCHANGE_NAME = "modify_exchange_name";
// 1.添加交换机队列
@Bean
public Queue directModifyInventoryQueue() {
return new Queue(MODIFY_INVENTORY_QUEUE);
}
// 2.定义交换机
@Bean
DirectExchange directModifyExchange() {
return new DirectExchange(MODIFY_EXCHANGE_NAME);
}
// 3.修改库存队列绑定交换机
@Bean
Binding bindingExchangeintegralDicQueue() {
return BindingBuilder.bind(directModifyInventoryQueue()).to(directModifyExchange()).with("modifyRoutingKey");
}
}
结束之后要进行生产者、消费者关系的书写,同时编写用户查询接口。后续要进行测试接口并且进行抢购模拟。并且通过浏览器访问得到结果。