请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,我这边存在以下几个疑问?

  1. 您的秒杀逻辑里面为什么没有对秒杀的商品对象加上分布式锁再将请求压进消息队列来保证库存的有序性,没有分布式锁在并发量大的时候难道不会出现超卖现象吗?
  2. rabbitmq的接收消息逻辑是不是一定要等前一条消息消费完才会消费下一条消息?
    	model.addAttribute("user", user);
    	if(user == null) {
    		return Result.error(CodeMsg.SESSION_ERROR);
    	}
    	//验证path
    	boolean check = miaoshaService.checkPath(user, goodsId, path);
    	if(!check){
    		return Result.error(CodeMsg.REQUEST_ILLEGAL);
    	}
    	//内存标记,减少redis访问
    	boolean over = localOverMap.get(goodsId);
    	if(over) {
    		return Result.error(CodeMsg.MIAO_SHA_OVER);
    	}
    	//预减库存
    	long stock = redisService.decr(GoodsKey.getMiaoshaGoodsStock, ""+goodsId);//10
    	//减少库存后,将减少库存的商品减一后put进一个Map中
		if(stock < 0) {
    		 localOverMap.put(goodsId, true);
    		return Result.error(CodeMsg.MIAO_SHA_OVER);
    	}
    	//判断是否已经秒杀到了
    	MiaoshaOrder order = orderService.getMiaoshaOrderByUserIdGoodsId(user.getId(), goodsId);
    	if(order != null) {
    		return Result.error(CodeMsg.REPEATE_MIAOSHA);
    	}
    	//入队
    	MiaoshaMessage mm = new MiaoshaMessage();
    	mm.setUser(user);
    	mm.setGoodsId(goodsId);
    	sender.sendMiaoshaMessage(mm);
    	return Result.success(0);//排队中

正在回答 回答被采纳积分+3

1回答

若鱼1919 2020-08-01 11:53:22

1.可以看下git上的课程常见问题,看下是如何保证不卖超的
2.多个消费者并发出队 无法保证顺序

0 回复 有任何疑惑可以回复我~
  • 提问者 BillyWebber #1
    就是说您课程的代码不能保证不会超卖对吧?
    回复 有任何疑惑可以回复我~ 2020-08-01 12:23:58
  • 提问者 BillyWebber #2
    rabbitmq是入队能保证顺序,出队无法保证顺序吗?
    回复 有任何疑惑可以回复我~ 2020-08-01 12:34:48
  • 若鱼1919 回复 提问者 BillyWebber #3
    并发写也没法保证顺序
    回复 有任何疑惑可以回复我~ 2020-08-01 15:09:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信