測試前清空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配置類中加一個配置即可