测试前清空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配置类中加一个配置即可