微服务中的事务管理

Transaction management in microservices

我们正在使用微服务重写遗留应用程序。每个微服务都有自己的数据库。某些 api 调用需要调用另一个微服务并将数据持久保存到两个数据库中。这种情况下如何有效实现分布式事务管理?

由于我们没有完全迁移到新的微服务环境,我们仍然将数据回写到旧的单体。为此,当调用微服务端点时,我们从微服务 api 调用整体服务以写回相同的数据。同样的问题怎么处理呢

提前致谢。

有不同的分布式事务框架,通常作为 JBoss 和 WebLogic 等重型应用程序服务器的一部分包含和维护。

此类服务通常使用的标准是 Jakarta Transactions(JTA;以前称为 Java Transaction API)。

Tomcat 和 Spring 不支持开箱即用的分布式事务。您可以使用 Atomikos 等第三方框架添加此功能(只是用谷歌搜索,我从未使用过)。

但请记住,使用 JTA 的微服务不再是“微”:-)

以下是对可用技术和可能的解决方法的简要概述:

https://www.baeldung.com/transactions-across-microservices

如果您可以负担得起稍后写入遗留系统(即允许在更新微服务和遗留系统之间有一些延迟),您可以使用发件箱模式。

本质上,这意味着您以事务方式向微服务数据库写入您通常写入的 tables 和一个额外的“发件箱”table 应用更改,然后有一个读取 table 并更新遗留系统的单独进程。

您还可以通过微服务中使用的数据库上的更改数据捕获机制实现类似的功能