关于跨域数据源处理的问题

来源:6-3 、多数据源DataSourceAspect原理和应用,及图文解析动态数据源切换原理

柔情不为暮色开

2024-07-23

老师你好,我现在有一个功能是这样的。在租户执行一个操作添加数据到租户数据库时时同时会在系统数据库中的某一个表中添加一条数据,因为使用@Transactional这个注解无法实现跨域回滚。在网上也试了很多方法都没法达到这个效果,请问老师有什么思路或者建议吗

写回答

1回答

Yerik老师

2024-07-24

老师给你总结几条建议,在分布式系统中,由于@Transactional注解只能保证在同一个数据源内的事务一致性,对于跨多个数据库的操作,它无法保证事务的一致性。为了解决这个问题,你可以考虑以下几种方法:

1. 使用分布式事务管理器:例如阿里巴巴的Seata,一个易于使用的高性能分布式事务解决方案,还有txlcn,支持最终一致性和事务回滚。

2. 使用消息队列(如RabbitMQ、Kafka等):当租户执行操作时,先在租户数据库中添加数据,然后发送一个消息到消息队列。系统数据库监听这个消息队列,收到消息后在系统数据库中添加数据。如果在这个过程中出现任何错误,可以通过重试或者人工干预来解决。

3. 使用事件驱动架构:当租户执行操作时,触发一个事件,然后有一个事件处理器负责处理这个事件,将数据添加到系统数据库。这种方法可以确保数据的最终一致性,但是需要一些额外的工作来实现事件处理器。

4. 如果以上方法都无法满足你的需求,你可能需要考虑改变你的系统设计,避免这种跨数据库的操作或者避免这种分布式一致性操作!

1
0

SpringBoot+Vue3打造企业级ERP+CRM一体化SaaS系统

SpringBoot+Vue3打造企业级ERP+CRM一体化SaaS系统

287 学习 · 84 问题

查看课程