概述

某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面。比如说:

public void updateProductInfo(Product product) {

//1、将商品价格更新到价格系统

priceService.updatePrice(product);

//2、将库存信息更新库存系统

stockService.updateStock(product);

//3、将商品更新到本地数据库

productService.updateProduct(product);

}

就上面这个例子(例子是虚构的,只是为了说明问题而已),它的执行路径有几种:

1、调用价格系统、库存系统的操作以及保存数据到本地DB都正常;

2、调用价格系统接口的时候就抛异常了;

3、调用价格系统接口正常,但是调用库存系统的接口有异常;

4、调用价格系统和库存系统的接口都正常了,但是将商品数据更新到本地数据库出现异常。

如果是第一和第二这两种情况,无需考虑数据一致性问题,但是如果出现了第三和第四这两种情况,我们就得根据业务实际情况,考虑如何保证数据的一致性。

这里说的保证数据一致性,必须是由调用方来保证的,服务端是无法保证的。

重试和操作日志

以上面提到的第三种情况来说明一下。

调用价格系统接口正常,但是调用库存系统的接口有异常。

库存接口允许重试

如果库存系统接口是幂等的,那么调用方可以使用重试的机制,多调用几次,比如说3次。如果还是不成功,那之前价格系统接口的操作就得走反向操作,进行现场恢复。

库存接口不允许重试

价格系统接口的操作得走反向操作,进行现场恢复

要实现反向操作,恢复现场,有一种办法是使用分布式事务,但是实现起来实在太复杂了,性能也不好。可以尝试使用操作日志来恢复现场。比如说,价格系统调用成功了,把这个操作状态以及相关的业务数据记录起来,当库存操作失败后,利用操作日志里的数据,将之前的价格操作恢复回来。这个恢复操作,价格系统可以单独提供出一个接口。

如果恢复现场的操作也失败了,这个时候只能人工介入解决了。没其他办法了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

Java怎么保证数据一致性_连续调用多个外部系统写接口保证数据一致性的思路...相关推荐

  1. SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER

    SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER 文章目录 SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER 一.GUI客户 ...

  2. mockito 多层调用_连续调用的Mockito迭代器样式存根

    mockito 多层调用 Sometimes we want to mock different responses for the consecutive calls on the same met ...

  3. httpclient依赖_.NetCore 3.1高性能微服务架构:封装调用外部服务的接口方法HttpClient客户端思路分析...

    护士节快乐 众所周知,微服务架构是由一众微服务组成,项目中调用其他微服务接口更是常见的操作.为了便于调用外部接口,我们的常用思路一般都是封装一个外部接口的客户端,使用时候直接调用相应的方法.webse ...

  4. java soap协议头_自己调用webservice方法总结(带请求头SoapHeader)

    调用webservice总结:1.加入第三方的jar包 Ksoap2-android-XXX2.访问响应的webservice的网站,查看响应的信息,得到nameSpace,methodName,ur ...

  5. java面向对象模拟电梯_面向对象的程序设计-电梯调度系统的设计、优化与测试...

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

  6. python前端调用后端模型_前端调用后端的方法(基于restful接口的mvc架构)

    1.前端调用后台: 建议用你熟悉的一门服务端程序,例如ASP,PHP,JSP,C#这些都可以,然后把需要的数据从数据库中获得,回传给客户端浏览器(其实一般就是写到HTML中,或者生成XML文件)然后在 ...

  7. Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业网站系统, 该项目可用各类java课程设计大作业中, 企业网站系统的系统架构分为前后台两部分, 最终实现在线上 ...

  8. java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器

    现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练是没有用的.最好能编程并运行,有没有什么好的神器可 ...

  9. java web汽车商城_基于jsp的汽车销售商城系统

    电子销售商城系统,是当今互联网上交易量最大的平台,而且随着互联网的不断发展,电子商城系统将会被普及到全球的每一个角落,而汽车销售商城系统是电子商城中销售汽车的一个领域.汽车销售商城系统不仅是轿车和服务 ...

最新文章

  1. 皮一皮:下班的渴望...
  2. VMware 在ubuntu-18.04.2安装搜狗输入法
  3. 音视频技术开发周刊 72期
  4. 使用LoadRunner-运行负载测试
  5. 【线性代数公开课MIT Linear Algebra】 第二十三课 微分方程与exp(At)
  6. 软件项目管理-构建之法-四周总结
  7. 电脑练习打字软件_练习打字软件Master of Typing 3 Mac
  8. apache 配置虚拟目录
  9. Machine Learning笔记(三) 多变量线性回归
  10. c++ 结构体中不同类型的初始值_不同类型结构的厂房效果图大盘点
  11. 电子书,电子图书馆网址大全
  12. matlab2017b安装之后点桌面图标黑框闪退
  13. Java代理模式实现与原理详解(二)
  14. 打造零售数据中台 数澜助百果园数字化转型
  15. 超级短信 handcent sms v4.4.1 android,超级短信(Handcent SMS)
  16. kfold cross_validate Stratified KFold StratifiedKFold 和 StratifiedShuffleSplit 交叉验证方法
  17. jQuery教程(整理自W3CSchool)(第一部分)
  18. Python 识别图片字符
  19. 中国大学MOOC-陈越、何钦铭-数据结构-2020春期中考试
  20. 【Delphi】中使用消息Messages(五)Windows消息

热门文章

  1. 视频教程-C#SQL查询技术-C#
  2. vue项目中的一些报错解决方法
  3. 我对所谓电信运营商重组和3G发牌的看法
  4. 登录系统——分布式系统实现游戏不分区思路
  5. python操作微信手机端下载_用PYTHON玩微信(非常详细)
  6. 众享比特荣登2020第六届中国最具投资价值公司百强榜
  7. 正则表达式规则以及贪婪匹配与非贪婪匹配
  8. asp.net core服务限制堆内存大小
  9. 【HaaS Hands-On】全新视频节目上线 创意案例我们一起上手做 第一期E01: 物联网工程师 和你一起上手做遥控机械臂
  10. 第五章 UML与数据库应用系统