@Transactional(rollbackFor = Exception.class) TackAnOrderVo tackAnOrder(@RequestBody @Validated PlaceOrderVo vo){

//提交订单

//提交库存

/提交其它

// 发送消息到 MQ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){ @Override public void afterCommit() { //发送mq更新es库存标志 for (Long drugId : drugIdList) { DrugChangeMessage drugChangeMessage = new DrugChangeMessage(); drugChangeMessage.setDrugId(drugId); drugChangeMessage.setStoreId(order.getStoreId()); drugChangeMessage.setChangeType(5); drugChangeMessage.setMerchantId(Long.parseLong(merchantId)); drugChangeMessage.setEnterpriseId(Long.parseLong(enterpriseId)); drugChangeMessage.setPlatformId(Long.parseLong(platformId)); drugChangeMessage.setChangedStock(updatedStock); // 添加变更后的库存数量 drugProducer.sendDrugChangeMsg(drugChangeMessage); }

        }
    });

}

rocketmq消息在其它服务消费,查询库存还是扣减前的库存数量,怎么改代码,消费是查询库存时是变更后的库存内容:当前代码中,在事务提交后,会发送一个MQ消息来更新库存标志。然后在其他服务中消费这个MQ消息,但是查询库存时却是扣减前的库存数量。如果想要在消费MQ消息时能够查询到变更后的库存数量,可以对代码进行如下修改:

  1. 在发送MQ消息时,将变更后的库存数量也发送到消息中。可以在DrugChangeMessage中添加一个字段changedStock,用于保存变更后的库存数量。
drugChangeMessage.setChangedStock(updatedStock);
  1. 在消费MQ消息时,获取到消息中的changedStock字段,并使用它来查询库存。

具体修改的代码如下:

// 在发送MQ消息时,将变更后的库存数量也发送到消息中
for (Long drugId : drugIdList) {
    DrugChangeMessage drugChangeMessage = new DrugChangeMessage();
    drugChangeMessage.setDrugId(drugId);
    drugChangeMessage.setStoreId(order.getStoreId());
    drugChangeMessage.setChangeType(5);
    drugChangeMessage.setMerchantId(Long.parseLong(merchantId));
    drugChangeMessage.setEnterpriseId(Long.parseLong(enterpriseId));
    drugChangeMessage.setPlatformId(Long.parseLong(platformId));
    drugChangeMessage.setChangedStock(updatedStock); // 添加变更后的库存数量
    drugProducer.sendDrugChangeMsg(drugChangeMessage);
}

// 在消费MQ消息时,获取到变更后的库存数量,并使用它来查询库存
public void consumeMessage(DrugChangeMessage message) {
    // 获取变更后的库存数量
    Integer changedStock = message.getChangedStock();
    
    // 使用变更后的库存数量来查询库存
    // ...
}

通过这样的修改,消费MQ消息时就可以查询到变更后的库存数量了。

@Transactional(rollbackFor = Exception.class) 消费RocketMQ消息查询变更后的库存数量

原文地址: https://www.cveoy.top/t/topic/pgKS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录