測(cè)試前清空Redis,恢復(fù)數(shù)據(jù)庫(kù)數(shù)據(jù),查看ActiveMQ控制臺(tái)情況。
1. 單用戶測(cè)試
2. 多線程模擬多用戶測(cè)試
修改15-seckill-web中GoodsController中的seckill方法
//接收用戶秒殺請(qǐng)求,通過(guò)多線程模擬多用戶訪問(wèn)
@PostMapping("/seckill/goods/{random}/{id}")
public @ResponseBody ReturnObject seckill(@PathVariable("random") String random,@PathVariable("id") Integer id){
//最佳實(shí)踐,線程的個(gè)數(shù)等于cpu的個(gè)數(shù)或者2倍,如果過(guò)多,會(huì)導(dǎo)致上下文切換過(guò)于頻繁
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);
}
//執(zhí)行秒殺
/*@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. 測(cè)試下單事務(wù)是否生效
在15-seckill-service中將OrderServiceImpl中的addOrders方法中構(gòu)建一個(gè)異常
將線程并發(fā)量降低一些,1w
4. 設(shè)置ActiveMQ消費(fèi)者的個(gè)數(shù)
設(shè)置消費(fèi)者的個(gè)數(shù),可以解決消息堆積的問(wèn)題,發(fā)消息太多太快,導(dǎo)致消費(fèi)太慢,獲取最終秒殺結(jié)果延時(shí)比較明顯,一般也是cpu個(gè)數(shù)的2倍
在15-seckill-service中的ActiveMQConfig配置類(lèi)中加一個(gè)配置即可