解决分布式事务中数据不一致性导致业务异常

本文探讨了在分布式环境下,由于订单下传与取消流程中的数据不一致导致的业务异常问题。当订单取消时,仓库可能已发货。分析了问题原因在于接口调用超时,提出了两种解决方案:一是查询订单下传状态,二是将订单状态与下传状态分离,确保下传成功后再更新状态。
摘要由CSDN通过智能技术生成

背景

第三方电商抓取订单后需要把订单下传到仓库,这样仓库那边才能正常发货。
第三方电商取消订单后;如果当前订单已经下传仓库,则需要向仓库发起订单拦截指令;如果没有下传仓库,则直接取消订单。
业务异常:订单取消成功但仓库却把订单中的商品发送了出去

第三方电商对应的服务为:xdt.service
下传仓库服务为:dip.service

项目采用dubbo分布式架构

订单下传与取消流转图

订单下传流转图
在这里插入图片描述

定单取消流转图
在这里插入图片描述

分析问题出现的原因

订单下传调用dip.service服务出现接口服务调用超时,可能导致在dip下传成功的订单在xdt中状态仍然为8002等待拦截。
此时如果第三方电商取消这个订单,这个订单会被直接取消,不会通知仓库进行拦截。

问题解决方案

方案1:取消订单的时候如果订单状态为8002,再去dip那边查询订单是否下传成功。如下为伪代码实现:

   void cancalOrder(String orderId){
    if(order.status==8002){
        if(dip.order.exist){
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值