【问题标题】:How to ensure atomicity of a method execution in spring boot?如何确保spring boot中方法执行的原子性?
【发布时间】:2020-09-27 00:16:05
【问题描述】:

我也有一个调用其他方法的方法。这些操作与 DB 没有任何关系。我只是在执行一些逻辑,对其他一些外部服务和所有服务进行很少的 API 调用。如果任何操作发生任何异常,我希望所有操作都必须回滚。我怎样才能做到这一点?

【问题讨论】:

  • 这在分布式系统中通常是不可能的。您必须以不同的方式组织您的应用程序,通常使用最终一致性

标签: java spring spring-boot transactions atomic


【解决方案1】:

很抱歉,您必须手动处理它。例如,如果发生异常,手动应用补偿操作来撤消。

一种叫做saga模式的模式就是为了解决这样的问题,我引用this的基本思想如下:

Saga 模式描述了如何解决分布式(业务) 没有两阶段提交的事务,因为这不会扩展 分布式系统。基本思路是打破整体 事务成多个步骤或活动。只有步骤 内部可以在原子事务中执行,但整体 一致性由 Saga 处理。传奇有 获得整体业务交易的责任 完成或使系统处于已知的终止状态。所以在 发生错误时应用业务回滚程序 通过以相反的顺序调用补偿步骤或活动。

【讨论】:

    【解决方案2】:

    这听起来像是一个天真的问题,但实际上非常棘手。您要求的是 API 调用之间的分布式事务。为此,API 对应物需要支持“两阶段提交”之类的东西。底线是:如果您的 API 提供者不支持分布式事务,您将不得不自己构建一些东西。 (贴一些代码,更详细地描述方法,我们会提供帮助)

    参见例如。更多详情:https://developers.redhat.com/blog/2018/10/01/patterns-for-distributed-transactions-within-a-microservices-architecture/,或者只是谷歌“分布式事务服务调用”

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多