SpringCloud商城day14 秒杀异步下单-2021-10-27

本文介绍了如何在SpringCloud中实现秒杀系统的异步下单功能,首先通过缓存减轻数据库压力并利用Redis的原子性防止超卖。接着新建服务`changgou_service_seckill`,设置秒杀时间段,并利用时间工具类进行日期转换。同时,开启定时任务查询符合条件的秒杀商品。在促销商品首页,每2小时更新时间菜单,并根据秒杀时间段在Redis中查询商品展示。前端使用Vue.js处理立即抢购按钮交互。
摘要由CSDN通过智能技术生成

一. 秒杀商品存入缓存

1. 客户访问-> seckill服务查询mysql-> seckill_goods表-> 缓存数据到MySQL-> 一是缓解高并发下数据库的查找压力, 二是利用redis的原子性操作避免超卖问题.

2. 新建服务changgou_service_seckill

(1)添加依赖: common-db/ eureka/ order-api/ seckill-api/ goods-api/ amqp/ oauth2
(2)添加changgou_service_seckill_api模块: 
    创建seckill/pojo/SeckillGoods.java 和 SeckillOrder.java
(3)启动类SeckillApplication.java
@SpringBootApplication
@EnableEurekaClient
@MapperScan(basePackages = {"com.changgou.seckill.dao"})
@EnableScheduling
public class SecKillApplication {
    public static void main(String[] args) {
        //TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
        SpringApplication.run(SecKillApplication.class, args);
    }
    //idWorker
    @Bean
    public IdWorker idWorker(){

        return new IdWorker(1, 1); //传入snowflake算法的参数(工作id, 序列号范围)
    }
    /**
     * 设置 redisTemplate 的序列化设置
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        // 1.创建 redisTemplate 模版
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        // 2.关联 redisConnectionFactory
        template.setConnectionFactory(redisConnectionFactory);
        // 3.创建 序列化类
        GenericToStringSerializer genericToStringSerializer = new GenericToStringSerializer(Object.class);
        // 6.序列化类,对象映射设置
        // 7.设置 value 的转化格式和 key 的转化格式
        template.setValueSerializer(genericToStringSerializer);
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
    @Bean
    public TokenDecode tokenDecode() {
        return new TokenDecode();
    }
}

(4)配置文件application.yml
server:
  port: 9011
spring:
  jackson:
    time-zone: GMT+8
  application:
    name: seckill
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.200.128:3306/changgou_seckill?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT%2b8
    username: root
    password: root
  main:
    allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
  redis:
    host: 192.168.200.128
  rabbitmq:
    host: 192.168.200.128
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka
  instance:
    prefer-ip-address: true
feign:
  hystrix:
    enabled: true
  client:
    config:
      default:   #配置全局的feign的调用超时时间  如果 有指定的服务配置 默认的配置不会生效
        connectTimeout: 60000 # 指定的是 消费者 连接服务提供者的连接超时时间 是否能连接  单位是毫秒
        readTimeout: 20000  # 指定的是调用服务提供者的 服务 的超时时间()  单位是毫秒
#hystrix 配置
hystrix:
  command:
    default:
      execution:
        timeout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值