当前位置: 首页 > 知识库问答 >
问题:

使用spring-cloud的微服务系统中服务间的分布式事务

薛承基
2023-03-14

得到了一个使用:< code>spring-boot、< code>spring-cloud、< code>postgresql作为微服务系统的项目。

有 2 个服务,比如 SA 和 SB,它们分别在 2 个 RDBMS 数据库上运行,比如 DA 和 DB。

现在,有一个包含2个子步骤的操作:

  1. Http客户端会向服务SA发出请求,将记录RA保存到DA中。
  2. 然后,SA向服务SB发送请求,将记录RB保存到DB中。

作为一个整体,这两个子步骤要么都提交,要么都回滚。

    < li >如果将这两个操作移动到单个服务中,那么可以使用Spring的分布式事务通过JTA(基于< code>2PC协议)来解决它。 < li >但是在这里,两个操作在两个服务中,它们通过http REST协议进行通信。也许可以使用mq补偿来解决这个问题,但我不确定是否有更好的方法。
    < li >在这种情况下,JTA(基于< code>2PC协议)是否仍然有效? < li >如果不是,首选的解决方案是什么?< br >我能猜到的可能解决方案: < ol > < li >重构代码,将两个操作移动到单个服务中。 < li >实施mq补偿架构以支持这一点。

共有1个答案

孙泉
2023-03-14

也许这个项目对你有帮助https://github.com/apache/servicecomb-pack

Apache ServiceComb Pack是微服务应用的最终数据一致性解决方案。ServiceComb Pack目前通过使用Alpha作为事务协调器和Omega作为事务代理来提供TCC和Saga分布式事务协调解决方案

 类似资料:
  • 我有两个微服务和调用来更新数据,然后插入另一个数据,但让我们考虑一下 失败,然后我们需要回滚由 更新的数据,否则我们将处于不一致的状态。 我也经历了佐贺patterns.will它满足了这种矛盾 谁能为此提出更好的解决方案?

  • 最近在学微服务的分布式事务,不太明白为什么在微服务这种分布式系统中,原有的单体acid会出现问题 希望大佬们可以讲一下原理和思想

  • 我知道最好使用 Saga 模式,但想想还是很有趣的: < Li > 2PC/XA分布式事务是否提供了仅从一个应用程序和一个TM与多个RM进行事务的可能性? < li >如果没有-如果每个微服务只能访问自己的数据库,如何在多个微服务之间使用2PC/XA分布式事务来提供使用2PC的能力?我很乐意看到一个例子 < li >我们是否需要将TransactionManager服务作为一个独立的微服务,在多个

  • 此外,如果我删除尤里卡和Zuul,我如何使它在本地和非kubernetes环境中工作?

  • 注解 注解 功能 @EnableEurekaServer 标注在 Application 类头,表示该服务为一个 服务注册发现服务器。 @EnableDiscoryClient 标注在 Application 类头,注册服务。 @@EnableFeignClients 标注在 Application 类头,发现服务。 @EnableZuulProxy 架构 服务注册与发现 1. 服务注册与发现 1