我是靠谱客的博主 危机苗条,最近开发中收集的这篇文章主要介绍订单业务的一致性(CAP中的C【Consistency】)-01问题的提出1.下面以一个具体的例子展开讨论。2.这样的代码应该怎么写呢?3.在一下地方出现问题会出现什么问题?3.1把订单保存在订单表中出现问题了3.2调用库存服务把库存减去2出现问题了3.3调用积分服务给张三添加800万积分成功了,但是后面服务处理问题4总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 为什么需要分布式事务?本地事务不够用吗?

1.下面以一个具体的例子展开讨论。

张三在商城上下单买了2台法拉利,每台400万。
在这里插入图片描述
业务交代清楚了。

2.这样的代码应该怎么写呢?

	//点击提交订单按钮的时候,问题来了
  	@Transactional
    @Override
    public SubmitOrderRespVo submitOrder(OrderSubmitVo orderSubmitVo) {

        
            if (checkValidity() ) {//校验合法性,如果一切合法,则开始提交代码
	                // 1.1把订单保存在订单表中
	                saveOrder(order);
	                
	                // 1.2调用库存服务吧库存减去2
	                R r = wareFeignService.orderLocKStock(orderSubmitVo);
	
					// 1.3调用用积分服务给张三添加800万积分
	               	R r = pointsFeignService.upPoint(orderSubmitVo);
	               	return submitOrderRespVo;
	               	
               }
            } 
        }
    }

上面的示意代码比较简单,使用openfign调用远程服务区扣减库存和提升积分。

  • 特别注意@Transactional说明这是一个本地事务。

3.在一下地方出现问题会出现什么问题?

@Transactional是一个本地事务,能控制住saveOrder(order),但是使用feign调用远程的服务这个@Transactional就鞭长莫及了。所以如果

R r = wareFeignService.orderLocKStock(orderSubmitVo);
R r = pointsFeignService.upPoint(orderSubmitVo);

出问题应该会不好办,我们做具体分析。

3.1把订单保存在订单表中出现问题了

如果saveOrder(order) 出现问题了,上面已经提到则@Transactional可以完满控制。

3.2调用库存服务把库存减去2出现问题了

问题一:为什么出现问题,可能是网络原因,下面就是一种情形:由于网络抖动,outOfTime了。这个时候,@Transactional获得消息,出现了异常就会做回滚操作,具体做什么事呢?就是把saveOrder(order);的执行重新吐出来。但是不好意思,刚才仅仅是网络抖动,其实已经成功了。我去,数据不一致了。我想要的应该是要成功都成功,要失败都失败呀。这个就是需要分布式事务的原因之一。
问题二:库存服务事务自制,如果出现问题,会自己回滚,但是订单感知不到。原因之二。

3.3调用积分服务给张三添加800万积分成功了,但是后面服务处理问题

此时,库存服务、订单服务均成功了。由于事务自制,不会进行回滚,但是订单服务在本事务@Transactional内会回归。原因之三。

4总结

处于以上三个原因,可能还有更多其他原因,导致,继续要呼吁一种分布式事务的解决方案,来处理这个问题。
下一篇:订单业务的一致性(CAP中的C【Consistency】)-02CAP介绍

最后

以上就是危机苗条为你收集整理的订单业务的一致性(CAP中的C【Consistency】)-01问题的提出1.下面以一个具体的例子展开讨论。2.这样的代码应该怎么写呢?3.在一下地方出现问题会出现什么问题?3.1把订单保存在订单表中出现问题了3.2调用库存服务把库存减去2出现问题了3.3调用积分服务给张三添加800万积分成功了,但是后面服务处理问题4总结的全部内容,希望文章能够帮你解决订单业务的一致性(CAP中的C【Consistency】)-01问题的提出1.下面以一个具体的例子展开讨论。2.这样的代码应该怎么写呢?3.在一下地方出现问题会出现什么问题?3.1把订单保存在订单表中出现问题了3.2调用库存服务把库存减去2出现问题了3.3调用积分服务给张三添加800万积分成功了,但是后面服务处理问题4总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部