最终方案中是否有个明显的我们很容易弥补的缺陷

来源:8-6 库存流水状态(4)

匪曰思存

2021-02-06

@Override
public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
//真正要做的事 创建订单
Integer itemId = (Integer) ((Map)arg).get(“itemId”);
Integer promoId = (Integer) ((Map)arg).get(“promoId”);
Integer userId = (Integer) ((Map)arg).get(“userId”);
Integer amount = (Integer) ((Map)arg).get(“amount”);
String stockLogId = (String) ((Map)arg).get(“stockLogId”);
try {
orderService.createOrder(userId,itemId,promoId,amount,stockLogId);
} catch (BusinessException e) {
e.printStackTrace();
//设置对应的stockLog为回滚状态
StockLogDO stockLogDO = stockLogDOMapper.selectByPrimaryKey(stockLogId);
stockLogDO.setStatus(3);
stockLogDOMapper.updateByPrimaryKeySelective(stockLogDO);
return LocalTransactionState.ROLLBACK_MESSAGE;
}
return LocalTransactionState.COMMIT_MESSAGE;
}
---------------------------------------------------
createOrder方法中假如下单失败,虽然消息这边会ROLLBACK_MESSAGE,即数据库库存不减。
但是redis库存还是减了。
应该可以在catch方法中调用回补redis库存的方法吧

写回答

1回答

龙虾三少

2021-02-06

回补操作不一定能保证成功 设计思考是宁可少卖也不要超卖

1
0

聚焦Java性能优化 打造亿级流量秒杀系统(赠秒杀项目)

理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题

2174 学习 · 1009 问题

查看课程