秒杀项目
秒杀项目基本环境搭建
商品展示模块
请求执行秒杀模块
秒杀流程总结

秒杀业务测试

测试前清空Redis,恢复数据库数据,查看ActiveMQ控制台情况。

1. 单用户测试

2. 多线程模拟多用户测试

修改15-seckill-web中GoodsController中的seckill方法

//接收用户秒杀请求,通过多线程模拟多用户访问
@PostMapping("/seckill/goods/{random}/{id}")
public @ResponseBody ReturnObject seckill(@PathVariable("random") String random,@PathVariable("id") Integer id){
    //最佳实践,线程的个数等于cpu的个数或者2倍,如果过多,会导致上下文切换过于频繁
    int cpu = 8;
    ExecutorService executorService = Executors.newFixedThreadPool(cpu * 2);
    for (int i = 0; i < 1000000; i++) {
        Integer uid = i;
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                seckillTest(uid,random,id);
            }
        });
    }
    return seckillTest(888888,random,id);
}

//执行秒杀
/*@PostMapping("/seckill/goods/{random}/{id}")
public @ResponseBody ReturnObject seckill(@PathVariable("random") String random,@PathVariable("id") Integer id){*/
public ReturnObject seckillTest(Integer uid,String random,Integer id){

3. 测试下单事务是否生效

在15-seckill-service中将OrderServiceImpl中的addOrders方法中构建一个异常

将线程并发量降低一些,1w

4. 设置ActiveMQ消费者的个数

设置消费者的个数,可以解决消息堆积的问题,发消息太多太快,导致消费太慢,获取最终秒杀结果延时比较明显,一般也是cpu个数的2倍

在15-seckill-service中的ActiveMQConfig配置类中加一个配置即可

全部教程