我有两个mico-serives A和B,它们连接到单独的数据库,来自Mico-serives A我需要在同一个转换中保存(保存)A和B的对象如何实现。
我正在使用带有netflix-oss的Spring微服务。请给出关于执行2阶段提交的最佳方法的建议。
答案 0 :(得分:5)
您无法在分布式环境中的微服务中实现传统的事务系统。
你应该事件采购+ CQRS 技术,因为它们是原子的,你将获得类似于在单片系统中实现事务或2PC的东西。
其他可能的方式是 transaction-log-mining ,我认为link-in正在使用这种方式,但它有自己的缺点和优点。例如不同数据库的二进制日志不同,同一种数据库中的事件在不同版本之间存在差异。
我建议您在事件存储中使用事件采购+ CQRS和字符串事件,然后在微观事件之间传输多个事件后,尝试在 CAP定理的基础上达到最终一致性服务A和B,并在每个步骤中更新域状态。
建议您使用 ActiveMQ , RabbitMQ 或 Kafka 等消息代理,以便在不同的微服务和字符串之间发送事件源事件它们在像mysql或其他系统这样的事件存储中。
除了模仿交易之外,这种方式的另一个好处是您将拥有完整的审核日志。
答案 1 :(得分:1)
这是一个架构(微服务)问题。 Spring boot或netflix-oss不提供直接解决方案。您必须实施自己的解决方案。查看event driven architecture。它可以给你一些想法。
答案 2 :(得分:1)