分布式事务中,调用方接收到被调用方给的异常中的提示信息

本文介绍在TX-LCN分布式事务框架下,如何在库存微服务检测到商品数量不足时,向订单微服务传递异常信息并触发事务回滚。通过修改库存微服务的异常处理方式,使用RspFailMessage返回错误信息,使订单服务能够捕获并响应。

 

我使用的是: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值