最终方案中是否有个明显的我们很容易弥补的缺陷
来源: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
回补操作不一定能保证成功 设计思考是宁可少卖也不要超卖
10
相似问题