Seata XA模式循环调用同一个fegin方法,修改同一条数据的时候,每次进来都是新建了一个不同sqlsession,这样到时获取不到数据锁。这个能不能通过配置或者其他的方案解决呢?
在 Seata XA 模式下,循环调用同一个 Fegin 方法,修改同一条数据时,每次进来都是新建了一个不同的 SQLSession,这会导致获取不到数据锁的问题。这个问题可能是由于 Seata 默认的数据源路由策略(AT 模式)不适用于 XA 模式情况下的多次相同操作,导致每次都会创建新的 SQLSession,从而无法获取到数据锁。
针对这种情况,可以尝试使用 Seata 提供的动态数据源路由的方式,来解决多次相同操作时无法获取数据锁的问题。动态数据源路由可以根据业务需要,动态地选择数据源,从而实现对多个数据库的访问。这样就可以避免在 XA 模式下多次相同操作时,每次都创建新的 SQLSession 的问题。
具体的操作步骤如下:
在 Seata 的配置文件中,将 enable-auto-data-source-proxy 设置为 true。
在项目的配置文件中,定义多个数据源,并指定数据源的路由规则。例如,可以使用 ShardingSphere 等开源框架,来实现动态数据源路由。
在调用 Fegin 方法时,使用 @GlobalTransactional 注解,来开启全局事务。在全局事务中,使用 @Transactional 注解,来开启本地事务。
反馈给数据库厂商吧,xa就是无法资源重入的,本身在一个调用链里重复修改同一条数据就是有问题的,什么业务场景需要反复横跳,而不是确定一个数据终态去落库,此回答整理自钉群“Seata(分布式事务)”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。