我们正在使用微服务重写旧版应用。每个微服务都有自己的数据库。某些 api 调用需要调用另一个微服务并将数据保存到两个数据库中。在这种情况下,如何有效地实现分布式事务管理?
由于我们没有完全迁移到新的微服务环境,因此我们仍然将数据写回旧的单体。为此,当调用微服务endpoint时,我们从微服务 API 调用整体式服务以写回相同的数据。在这种情况下,如何处理相同的问题。
提前谢谢。
有不同的分发者事务框架通常作为重型应用程序服务器(如JBoss和WebLogic)的一部分进行包含和维护。
此类服务通常使用的标准是Jakarta Transactions(JTA;以前称为Java Transaction API)。
Tomcat和Spring不支持开箱即用的分布式事务。您可以使用第三方框架(如Atomikos)添加此功能(刚刚用谷歌搜索,我从未使用过它)。
但请记住,使用 JTA 的微服务不再是“微”:-)
以下是对可用技术和可能的解决方法的简要概述:
https://www.baeldung.com/transactions-across-microservices
如果以后可以写入旧系统(即在更新微服务和旧系统之间允许一些延迟),则可以使用发件箱模式。
从本质上讲,这意味着您以事务方式写入微服务数据库,同时写入通常写入的表和要应用的附加“发件箱”更改表,然后有一个单独的进程来读取该表并更新旧系统。
您还可以在微服务中使用的数据库上使用变更数据捕获机制来实现类似的事情