代码之家  ›  专栏  ›  技术社区  ›  testtt

微服务REST调用和数据库事务

  •  0
  • testtt  · 技术社区  · 1 年前

    最近我遇到了以下情况。 我的两个服务正在使用REST调用相互调用。 让我们把它命名为:ServiceA和ServiceB。

    场景如下:

    1. ServiceA接收用户的一些输入。
    2. ServiceA将此信息保存到数据库中。
    3. ServiceA对ServiceB执行REST调用,以获取有关之前从用户接收到的数据的更多详细信息。
    4. ServiceA等待来自ServiceB的响应
    5. ServiceA从ServiceB接收数据并保存到数据库中

    以上所有操作都是在用Spring注释的方法下执行的 @Transactional 注释

    如果serviceB没有响应请求(失败),我预计我在ServiceA中的事务将失败,之前的数据将被还原

    我在努力判断这种方法是否好。 进行REST调用可能需要一些时间,例如,我正在使用重试回退机制。 我不确定交易会如何进行。

    感谢您的帮助和澄清。

    0 回复  |  直到 1 年前
        1
  •  0
  •   Youness Tizi    1 年前

    正如您所提到的,上述操作在@Transactional下处理,这意味着所有任务都在一个或多个事务下处理。

    以下是针对您案例的解决方案:

    确保上述操作在一个事务下处理(使用 @事务性(传播=传播。必填) 支持现有事务,如果不存在事务,则创建新事务)。

    如果在等待serviceB时出现问题(例如抛出异常),事务将回滚指定的异常(例如,定义WebServiceException并使用 @事务性(回滚For=WebServiceException.class) .