@Transactional(rollbackFor = Exception.class) 消费RocketMQ消息查询变更后的库存数量
@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消息时能够查询到变更后的库存数量,可以对代码进行如下修改:
- 在发送MQ消息时,将变更后的库存数量也发送到消息中。可以在
DrugChangeMessage中添加一个字段changedStock,用于保存变更后的库存数量。
drugChangeMessage.setChangedStock(updatedStock);
- 在消费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消息时就可以查询到变更后的库存数量了。
原文地址: https://www.cveoy.top/t/topic/pgKS 著作权归作者所有。请勿转载和采集!