开发者社区 > 云原生 > 正文

Seata XA模式循环调用同一个fegin方法,修改同一条数据的时候,每次进来都是新建了一个不同s

Seata XA模式循环调用同一个fegin方法,修改同一条数据的时候,每次进来都是新建了一个不同sqlsession,这样到时获取不到数据锁。这个能不能通过配置或者其他的方案解决呢?

展开
收起
cuicuicuic 2023-06-06 18:49:01 132 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Seata XA 模式下,循环调用同一个 Fegin 方法,修改同一条数据时,每次进来都是新建了一个不同的 SQLSession,这会导致获取不到数据锁的问题。这个问题可能是由于 Seata 默认的数据源路由策略(AT 模式)不适用于 XA 模式情况下的多次相同操作,导致每次都会创建新的 SQLSession,从而无法获取到数据锁。

    针对这种情况,可以尝试使用 Seata 提供的动态数据源路由的方式,来解决多次相同操作时无法获取数据锁的问题。动态数据源路由可以根据业务需要,动态地选择数据源,从而实现对多个数据库的访问。这样就可以避免在 XA 模式下多次相同操作时,每次都创建新的 SQLSession 的问题。

    具体的操作步骤如下:

    在 Seata 的配置文件中,将 enable-auto-data-source-proxy 设置为 true。

    在项目的配置文件中,定义多个数据源,并指定数据源的路由规则。例如,可以使用 ShardingSphere 等开源框架,来实现动态数据源路由。

    在调用 Fegin 方法时,使用 @GlobalTransactional 注解,来开启全局事务。在全局事务中,使用 @Transactional 注解,来开启本地事务。

    2023-06-06 22:10:30
    赞同 展开评论 打赏
  • 反馈给数据库厂商吧,xa就是无法资源重入的,本身在一个调用链里重复修改同一条数据就是有问题的,什么业务场景需要反复横跳,而不是确定一个数据终态去落库,此回答整理自钉群“Seata(分布式事务)”

    2023-06-06 19:05:53
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
《Seata 1.3 新特性以及如何参与社区》 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载