如何在两个微服务(Spring-boot)之间进行两阶段提交?

How to do 2 phase commit between two micro-services(Spring-boot)?

我有两个 mico-serives A 和 B,它们连接到单独的数据库,从 Mico-serives A 我需要在同一个转换中持久化(保存)A 和 B 的对象如何实现这个。

我正在使用 Spring netflix 微服务-oss.Please 就实现 2 阶段提交的最佳方式提出建议。

这是一个架构(微服务)问题。 Spring boot 或 netflix-oss 不提供直接解决方案。您必须实施自己的解决方案。用 event driven architecture 检查。它可以给你一些想法。

你不能在分布式环境的微服务中实现传统的事务系统。

你应该 Event Sourcing + CQRS 技术,因为它们是原子的,你将获得类似在单体系统中实现事务或 2PC 的东西。

其他可能的方式是事务日志挖掘,我认为链接在使用这种方式,但它有其自身的缺点和优点。例如不同数据库的binary log不同,同种数据库的event不同版本也有差异

我建议您在事件存储中使用事件溯源 + CQRS 和字符串事件,然后尝试根据 CAP 定理[=31= 达到最终一致性 ] 在微服务 A 和 B 之间传输多个事件并在每个步骤中更新域 states 之后。

建议您使用 ActiveMQRabbitMQKafka 等消息代理用于在不同的微服务之间发送事件源事件,并将它们串入 mysql 或其他系统等事件存储中。

除了模拟交易之外,这种方式的另一个好处是您将拥有完整的审计日志

你可以尝试 SAGA 模式 https://microservices.io/patterns/data/saga.html