go小白入门 | 青训营笔记

103 阅读2分钟

青训营课程笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天,今天主要学习了微服务框架与秒杀系统的制作。

秒杀业务

电商平台:目前消费者已经习惯多平台比价消费,基于各家玩法差异寻求最佳的购物选择,各大电商平台用户重合率不断增长更加增强市场竞争。

电商秒杀业务:秒杀的特点就是时间极短瞬间用户量大,明显的高并发的特点;同时会面对超发的问题以及有人通过恶意请求(脚本模拟炸机)。可以通过服务单一的方式,现在设计基本都是微服务的设计思想+分布式的部署方式,所以可以秒杀单独建立一个库,如果出现秒杀没抗住,那么秒杀库崩了,也不会影响其他业务。如果有人出现用脚本进行链接毫秒级抢购,那么可以将url动态化需要用到md5的加密方式生成随机数。

解决:针对可能出现炸库等问题,可以用redis集群的办法多搞几个redis进行主从同步+读写分离。或者可以通过换高性能的web服务器,比如nginx,通过多租几个服务器进行并发的分流。另外可以通过按键控制、前后端限流、库存预热的方式进行缓解。流程图如下:

v2-2da6e26351ec8edf41e3dd352ccacc1b_1440w.webp

秒杀系统制作:

秒杀系统的核心就是秒杀接口,首先就是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");
  }

}

结束之后要进行生产者、消费者关系的书写,同时编写用户查询接口。后续要进行测试接口并且进行抢购模拟。并且通过浏览器访问得到结果。