线上问题:大事务问题

博客讲述了在A系统调用B系统过程中遇到的大事务问题,由于B系统的消息回调早于A系统的事务提交,导致数据不一致。文章分析了问题原因,并提出了四种解决方案,最终选择了将事务方法拆解以提高代码的干净度和可读性,减少线上问题的发生。
摘要由CSDN通过智能技术生成

大事务问题通常是说,在一个方法的逻辑中,执行的业务逻辑较多,导致接口响应时间较慢等带来的问题,那我在线上碰到的问题是这样子的:

线上系统交互逻辑

我自己的系统是A系统,我的下游是B系统
1.A系统对上游提供了创建订单的接口createOrder()
2.我的接口中,会先进行一系列规则校验,校验完成之后,通过dubbo接口调用B系统的接口
3.调用B系统的接口之后,会接着进行数据库的更新以及其他的业务逻辑的执行,最后再提交事务
上面这三个步骤是我自己接口中做的事情,是在一个大的事务方法中

4.B系统在接收到我的请求之后,自己处理完之后,会发送一个mq消息给我的A系统
5.A系统在接收到mq消息之后,会调用updateDateTimer()方法,这个方法中,依赖createOrder()接口中对数据库字段更新的信息

出现的问题

此时出现的问题是:B系统的消息回调,先于A系统中createOrder()方法事务的提交,那此时就有问题了,在updateDateTimer()接口中,取到的是更新之前的值,那此时问题就大了,下游一直存储的是更新之前的值

问题分析

我们把水平方向,想象为一个时间轴,那按照我们设想的逻辑,在提交事务之后,再接收到消息回调,此时就没后问题了,收到消息回调的时候,在updateDateTimer()方法中,取到的就是事务提交之后的值,但是实际出现问题的时候,并不是这样子的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值