事务型消息

在进行秒杀项目的开发过程中,遇到了一个问题,下单-库存减少异步处理库存,下单后,进行redis操作,订单入库,销量增加,异步操作数据库库存一、直接使用Springboot提供方法// Springboot 提供的事务操作方法 当前事务操作成功 方法调用TransactionSynchronizationManager.registerSynchronization(new Transact...
摘要由CSDN通过智能技术生成

在进行秒杀项目的开发过程中,遇到了一个问题,下单-库存减少
异步处理库存,下单后,进行redis操作,订单入库,销量增加,异步操作数据库库存
一、直接使用Springboot提供方法

// Springboot 提供的事务操作方法 当前事务操作成功 方法调用
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
          @Override
            public void afterCommit() {
                // 异步更新库存
                boolean mqResult = itemService.asyncDecreaseStock(itemId, amount);
                if (!mqResult) {
                   itemService.increaseStock(itemId, amount);
                                       throw new BusinessException(EmBusinessError.MQ_SEND_FAIL);
               }
           }
        });

二、通过库存流水进行状态标识,配合rocketmq事务

  • RocketMQ TransactionMQProducer 设置listener
  • executeLocalTransaction 进行事务方法的处理
  • checkLocalTransaction 进行异常事务的处理

具体的操作逻辑
1、controller 进行 mq异步事务调用

if (redisTemplate.hasKey("promo_stock_invalid_" + itemId)) {
            throw new BusinessException(EmBusinessError.STOCK_NOT_ENOUGH);
        }
        // 加入库存流水
        String stockLogResultId = itemService.initStockLog(itemId, amount);

        // 完成下单事务消息
        if (!mqProducer.transactionAsyncReduceStock(userModel.getId(), itemId, promoId, amount, stockLogResultId)) {
            throw new BusinessExcep
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值