我有两个微服务 A 和 B,它们连接到单独的数据库,从微服务 A 我需要在相同的转换中持久(保存)A 和 B 的对象如何实现这一点。
我正在使用带有 netflix-oss 的 Spring 微服务。请就完成 2 阶段提交的最佳方法提出建议。
我有两个微服务 A 和 B,它们连接到单独的数据库,从微服务 A 我需要在相同的转换中持久(保存)A 和 B 的对象如何实现这一点。
我正在使用带有 netflix-oss 的 Spring 微服务。请就完成 2 阶段提交的最佳方法提出建议。
你无法在分布式环境中的微服务中实现传统的事务系统。
您应该使用Event Sourcing + CQRS 技术,因为它们是原子的,您将获得诸如在单片系统中实现事务或 2PC 之类的东西。
其他可能的方式是事务日志挖掘,我认为链接中正在使用这种方式,但它有其自身的缺点和优点。例如,不同数据库的二进制日志是不同的,同一种数据库中的事件在不同版本之间存在差异。
我建议您在事件存储中使用 Event Sourcing + CQRS 和字符串事件,然后在微服务 A 和 B 之间传输多个事件并在每个步骤中更新域状态后尝试根据CAP 定理达到最终一致性。
建议您使用ActiveMQ、RabbitMQ或Kafka等消息代理在不同微服务之间发送事件源事件,并将它们串入 mysql 或其他系统等事件存储中。
除了模仿事务之外,这种方式的另一个好处是您将拥有完整的审计日志。
这是一个架构(微服务)问题。Spring boot 或 netflix-oss 不提供直接解决方案。您必须实施自己的解决方案。检查事件驱动架构。它可以给你一些想法。
您可以尝试 SAGA 模式https://microservices.io/patterns/data/saga.html