我使用的是:TX-LCN分布式事务框架 5.0.2
业务场景:
1、用户下单购买商品。
2、订单微服务中,新增订单表信息
3、库存微服务中,库存商品数量表中商品数量减去订单中商品的数量。
问题:
1、当执行到第三步时,订单中的商品数量 超过 库存中的商品数量时,这个是库存微服务就需要手动抛出异常,并且返回信息,告诉订单微服务,让它事务回滚,我这里是可以让订单微服务回滚,但是我得不到库存微服务给的提示信息,请问如何得到这个提示信息呢?
代码如下:
库存微服务:
Integer inventoryGoodsNumber = inventory.getGoodsNumber();//库存商品数量
Integer remaining = inventoryGoodsNumber - goodsNumber;//库存商品剩余数量
if (remaining < 0){
throw new DistributedDissatisfyConditionException("库存数量小于:"+goodsNumber+",商品不足");
}
我在这个地方抛出异常,订单微服务是可以回滚的,但是它得不到我给它的异常提示,怎么得到这个提示啊?
解决方法:通过在订单服务的手动抛出来获取到返回的信息。如下:
上面的代码修改如下:
Integer inventoryGoodsNumber = inventory.getGoodsNumber();//库存商品数量
Integer remaining = inventoryGoodsNumber - goodsNumber;//库存商品剩余数量
if (remaining < 0){
return new RspFailMessage("","库存数量小于:"+goodsNumber+",商品不足");
}
而在订单服务中如下:
//请求库存表,用于商品的减库存
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
paramMap.add("goodsId", order.getGoodsId());
paramMap.add("goodsNumber", "1");
RspMessage forObject = restTemplate.postForObject(REST_URL_PREFIX + "/inventory/reduce",paramMap, RspMessage.class);//调用库存微服务
System.out.println(forObject);
if (!forObject.isSuccess()){
DTXUserControls.rollbackCurrentGroup();//TX-LCN分布式事务框架 5.0 手动回滚事务。
return forObject;
}
这个问题:主要是需要通过手动回滚tx-lcn的事务。
亲测有效。
源码在这篇文章底部:https://blog.youkuaiyun.com/java_xuetu/article/details/101209797
本文介绍在TX-LCN分布式事务框架下,如何在库存微服务检测到商品数量不足时,向订单微服务传递异常信息并触发事务回滚。通过修改库存微服务的异常处理方式,使用RspFailMessage返回错误信息,使订单服务能够捕获并响应。
41

被折叠的 条评论
为什么被折叠?



