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

sat*_*ees 4 2phase-commit distributed-transactions spring-boot microservices

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

我正在使用带有netflix-oss的Spring微服务.请给出关于执行2阶段提交的最佳方法的建议.

小智 6

您无法在分布式环境中的微服务中实现传统的事务系统.

您应该使用事件采购+ CQRS 技术,因为它们是原子的,您将获得类似于在单片系统中实现事务或2PC的功能.

其他可能的方式是事务日志挖掘,我认为link-in正在使用这种方式,但它有自己的缺点和优点.例如,不同数据库的二进制日志不同,同一种数据库中的事件在不同版本之间存在差异.

我建议你使用事件采购+ CQRS和字符串事件在事件店内然后尝试达到最终一致性的基础CAP定理传输多个事件微服A和B之间和更新域后的状态中的每个步骤.

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

除了模仿事务之外,这种方式的另一个好处是您将拥有完整的审计日志.