使用seata时遇到调用第三方接口无法回滚问题处理思路

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用seata时遇到调用第三方接口无法回滚问题处理思路

🔊使用seata时遇到调用第三方接口无法回滚问题处理思路

🔊业务场景

两个微服务模块 订单模块 资金模块

一个第三方接口 erp接口

下订单时需要先将某笔钱退回并且推送给erp,然后重新占用一笔新金额然后推送erp接口

📆 问题描述

整个接口加上了seata全局事务管理

当退erp接口成功后,重新占用时 金额发生不足,因为加了全局事务会将在订单模块的退回操作回滚,但推送erp接口属于第三方接口,并不会回滚 ;导致的结果是自己系统数据回滚正常但已经推送了一笔退回资金的操作给erp接口

📕希望结果

当占用失败时;不仅订单业务中的金额需要回滚;刚刚推送给erp的金额也需要重新生成一条相对应的取反操作 以此进行平帐

🖥️解决思路

前提条件 日志模块不受seata管理 订单及资金模块受seata管理

  1. 退回金额时生成一个回滚序列号rollbackNum 用return+订单编码+时间戳

  2. 推送erp接口时增加一个日志,日志记录传递参数及结果 日志中记录字段

回滚序列号returnNum,回退状态 returnState 0无需回滚 1待回滚 2回滚成功 3回滚失败,回退操作推送成功后记录日志状态为 0无需回滚

  1. 在占用操作方法上增加 try catch 如果出现错误,先调用日志服务将rollbackNum 关联的日志回滚状态returnState 修改为1待回滚

  2. 然后发送mq,传递rollbackNum (因为mq消息也不受seata管理),mq接受到消息后将rollbackNum 关联的日志中returnState 1待回滚 3回滚失败两种状态的日志进行回滚,

  3. 由于日志中记录了回退时推送erp的请求参数,回滚时只需要清楚规则 将请求参数进行转换即可

🧣最后的话

🖲要熟练掌握技巧,一定多多练习:纸上得来终觉浅,绝知此事要躬行

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
Kubernetes Cloud Native Java
Seata常见问题之回滚一直在重试如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
|
4月前
|
Nacos 数据库 开发者
Seata回滚问题之异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
429 9
|
4月前
|
SQL API 数据库
Seata AT模式问题之抛出异常触发回滚如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题
455 5
|
4月前
|
数据库 开发者
Seata调用问题之全局异常捕获没法回滚如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
403 3
|
4月前
|
开发者
seata事务问题之不回滚客户端如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
371 4
|
4月前
|
监控 数据库
在Seata中一张表使用了联合主键,在事务回滚时报异常,改为单个主键,就没有这个异常,如何解决?
在Seata中一张表使用了联合主键,在事务回滚时报异常,改为单个主键,就没有这个异常,如何解决?
原理篇:Seata TCC模式是如何解决幂等性、资源悬挂、空回滚问题的
原理篇:Seata TCC模式是如何解决幂等性、资源悬挂、空回滚问题的
1089 0
|
3月前
|
Apache 开发者
Apache Seata 如何解决 TCC 模式的幂等、悬挂和空回滚问题
【6月更文挑战第8天】Apache Seata 是一款分布式事务框架,解决TCC模式下的幂等、悬挂和空回滚问题。通过记录事务状态处理幂等,设置超时机制避免悬挂,明确标记Try操作成功来处理空回滚。Seata 提供丰富配置和管理功能,确保分布式事务的可靠性和效率,支持复杂事务处理场景,为企业业务发展提供支持。
154 7
|
4月前
|
Java 数据库连接 API
Seata异常捕获问题之回滚事务如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
468 8
|
4月前
|
SQL 监控 数据库连接
Seata适配问题之回滚失败如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
769 5