专栏名称: 架构文摘
每天一篇架构领域重磅好文,涉及一线互联网公司的互联网应用架构、大数据、机器学习等各个热门领域。
目录
相关文章推荐
字节跳动技术团队  ·  字节跳动技术副总裁洪定坤:TRAE 想做 ... ·  9 小时前  
字节跳动技术团队  ·  豆包大模型升级1.6版,视频模型上新 ·  昨天  
高可用架构  ·  4 年融资 1 ... ·  昨天  
字节跳动技术团队  ·  ByteBrain团队SIGMOD25 | ... ·  2 天前  
51好读  ›  专栏  ›  架构文摘

高并发下的下单功能设计

架构文摘  · 公众号  · 架构  · 2017-10-20 09:00

正文

请到「今天看啥」查看全文




下面就是controller层的设计


@Controller
public class SecKillController {

@Autowired
SecKillGoodsDao secKillGoodsDao;
@Autowired
SecKillService secKillService;

/**
* 普通写法
* @param consumer
* @param goodsId
* @return
*/
@RequestMapping("/seckill.html")
@ResponseBody
public String SecKill(String consumer,String goodsId,Integer num) throws InterruptedException {
//查找出用户要买的商品
SecKillGoods goods = secKillGoodsDao.findOne(goodsId);
//如果有这么多库存
if(goods.getRemainNum()>=num){
//模拟网络延时
Thread.sleep(1000);
//先减去库存
secKillGoodsDao.reduceStock(num);
//保存订单
secKillService.generateOrder(consumer,goodsId,num);
return "购买成功";
}
return "购买失败,库存不足";
}

}


上面是全部的基础准备,下面使用一个单元测试方法,模拟高并发下,很多人来购买同一个热门商品的情况。


@Controller
public class SecKillSimulationOpController {

final String takeOrderUrl = "http://127.0.0.1:8080/seckill.html";

/**
* 模拟并发下单
*/
@RequestMapping("/simulationCocurrentTakeOrder")
@ResponseBody
public String simulationCocurrentTakeOrder() {
//httpClient工厂
final SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
//开50个线程模拟并发秒杀下单
for (int i = 0; i < 50; i++) {
//购买人姓名
final String consumerName = "consumer" + i;
new Thread(new Runnable() {
@Override
public void run() {
ClientHttpRequest request = null;
try {
URI uri = new URI(takeOrderUrl + "?consumer=consumer" + consumerName + "&goodsId=123456&num=1");
request = httpRequestFactory.createRequest(uri, HttpMethod.POST);
InputStream body = request.execute().getBody();
BufferedReader br = new BufferedReader(new InputStreamReader(body));
String line = "";
String result = "";
while ((line = br.readLine()) != null) {
result += line;//获得页面内容或返回内容
}
System.out.println(consumerName+":"+result);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
return "simulationCocurrentTakeOrder";
}

}







请到「今天看啥」查看全文