黑马点评用rabbitmq实现优惠券秒杀下单后的异步操作数据库数据
创始人
2024-11-04 02:36:14
0

导入配置

				 			org.springframework.boot 			spring-boot-starter-amqp 			2.7.7 		 

配置文件配置

在这里插入图片描述

JavaConfig配置

@Component @Slf4j public class RabbitmqConfig implements InitializingBean {     @Resource     private RabbitTemplate rabbitTemplate;      @Override     public void afterPropertiesSet() throws Exception {         log.info("初始化配置rabbitmq配置");  //        rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter(new ObjectMapper()));         rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {             @Override             public void confirm(CorrelationData correlationData, boolean b, String s) {                 if(!b)                 {                     log.error("发送消息到mq失败,原因:{}",s);                 }             }         });         rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {             @Override             public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {                 log.error("消息返回回调触发,交换机:{},路由:{},消息内容:{},原因:{}",exchange,routingKey,message,replyText);             }         });     } } 

通过@Bean注入MessageConverter,保证消息的正确传输

    @Bean     public MessageConverter jsonMessageConverter(ObjectMapper objectMapper) {         return new Jackson2JsonMessageConverter(objectMapper);     } 

修改后的代码

    @Override     //关于事务注解     public Result seckillVoucher(Long voucherId) { //        1,执行lua脚本,lua脚本用于判断库存是否充足,扣库存操作         Long userId=UserHolder.getUser().getId();         long orderId=redisIDworker.nextId("order");          //执行此操作前保证,用户查看优惠券的请求,和添加优惠券时 已经将秒杀优惠圈的库存数量添加到了redis中         Long result=stringRedisTemplate.execute(                 SECKILL_SCRIPT,                 Collections.emptyList(),                 voucherId.toString(),                 userId.toString(),                 String.valueOf(orderId)         );         //获取lua脚本返回值         int r=result.intValue();         if(r!=0)         {             return Result.fail(r==1?"库存不足":"不能重复下单");         } //        //获取代理对象 //        IVoucherOrderService proxy= (IVoucherOrderService) AopContext.currentProxy();         //异步写数据库         VoucherOrder voucherOrder = new VoucherOrder();         voucherOrder.setId(orderId);         voucherOrder.setUserId(userId);         voucherOrder.setVoucherId(voucherId);         rabbitTemplate.convertAndSend(SaveVoucherConstants.SECKILL_VOUCHER_SAVE_QUEUE,voucherOrder);         log.info("发送保存秒杀券订单信息成功:{}",orderId);         return Result.ok("seckSuccess");     } 

监听器

@Component @Slf4j public class AsyncSaveVoucherListener {     @Resource     private IVoucherOrderService voucherOrderService;     @Resource     private ISeckillVoucherService seckillVoucherService;     @RabbitListener(queuesToDeclare = {@Queue(name= SaveVoucherConstants.SECKILL_VOUCHER_SAVE_QUEUE)})     public void AsyncSave(VoucherOrder voucherOrder)     {         log.info("接收到存储订单信息的消息,{}", JSON.toJSON(voucherOrder).toString());         boolean success = seckillVoucherService.update().setSql("stock=stock-1").eq("voucher_id", voucherOrder.getVoucherId()).gt("stock", 0).update();         voucherOrderService.save(voucherOrder);         log.info("订单信息存储完成?{}",success);     } }  

相关内容

热门资讯

vmware中如何安装安卓系统... 亲爱的电脑玩家和系统爱好者们,你是否曾梦想过在VMware中安装一个完整的安卓系统,就像在你的手机上...
头条推荐!金花房间怎么创建豌豆... 豌豆互娱是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
正规平台有哪些,怎么买斗牛房卡... 正规平台有哪些,怎么买斗牛房卡天王大厅/新天道/微信链接房卡从哪里获取Sa9Ix苹果iPhone 1...
微信牛牛房卡在哪里买的/微信开... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
一分钟了解!金花房卡代理零售神... 神龙大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
正版授权!金花房卡是正规的玫瑰... 今 日消息,玫瑰大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正版金花房卡批发渠道/炸金花房... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享受...
ia攻略/怎么买斗牛房卡新下游... ia攻略/怎么买斗牛房卡新下游/人皇大厅/微信链接房卡销售购买新下游/人皇大厅是一款非常受欢迎的游戏...
科技实测!牛牛房卡怎么购买战神... 微信游戏中心:战神联盟房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
头条推荐!游戏推荐斗牛房卡出售... 您好!微信精灵大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(精灵大厅)大厅介绍:...
头条推荐!牛牛房卡出售王者互娱... 今 日消息,王者互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
ia攻略/牛牛房卡怎么获得新二... ia攻略/牛牛房卡怎么获得新二号/微信链接房卡卖家联系方式新二号是一款非常受欢迎的游戏,咨询房/卡添...
微信炸金花链接怎样弄/微信金花... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
正版授权!牛牛房卡出售新详心/... 新详心/飞鹰大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:33...
IA解析/牛牛房卡游戏平台加盟... 您好!微信海星大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(海星大厅)大厅介绍:...
玩家攻略,游戏微信牛牛房卡新蜜... 今 日消息,新蜜瓜大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简...
重大通报,牛牛房卡批发平台卡贝... 卡贝大厅/新上游房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
ia实测“金花建房软件哪个好/... 卡米大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
我来教你/牛牛充值房卡乐乐堂/... 我来教你/牛牛充值房卡乐乐堂/房卡价格表多少钱一张Sa9Ix苹果iPhone 17手机即将进入量产阶...
一分钟推荐“微信炸金花链接怎样... 随意玩俱乐部是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房...