【问题标题】:Distributed transaction rollback with Spring-Boot使用 Spring-Boot 进行分布式事务回滚
【发布时间】:2020-07-07 02:31:47
【问题描述】:

我正在学习使用 Spring-Boot 进行分布式事务回滚。 我正在使用带有 JPA 和 H2 数据库的 spring-boot 2.2。 在我的示例中,我有三个运行在不同端口上的微服务,它们都有自己的 H2 数据库。

微服务A --- http://localhost:2222/savePersonBasicDetails
微服务B --- http://localhost:3333/savePersonAddress
微服务C --- http://localhost:4444/savePersonHobbies

从 MicroserviceA 中,我将获得 Person_Id,并将其连同它们各自的数据一起发送给其余两个微服务。如果任何一个微服务失败,那么我想回滚整个事务。

示例:

保存(PersonVO personVO){

Integer personId = microserviceA.savePersonBasicDetails(personVO);

microserviceB.savePersonAddress(personId, personVO);

microserviceC.savePersonHobbies(personId, personVO);//If it fails in microserviceC,     

                                              //then the complete transaction should be rolled back.

}

我尝试在 save() 方法上使用 @Transactional(rollbackFor = Exception.class),但事务没有回滚。

请提出建议。

【问题讨论】:

    标签: java spring-boot web-services microservices xa


    【解决方案1】:

    您混淆了这些术语。分布式事务是与 RDBMS 相关的术语,而不是与 Web 服务相关的术语。有一个 webservice 标准,用于通过 webservice WS-TRANSACTION 进行与soap webservices 相关的事务。但这个标准大多没有使用。

    在 web 服务上下文中使用的通常是事务补偿,您可以搜索它。一种非常常见的补偿模式是 Try Cancel Confirm 模式,也有不同的方法。

    如果您坚持使用分布式事务,请查看此链接: https://www.atomikos.com/Blog/TransactionalRESTMicroservicesWithAtomikos

    【讨论】:

    • 感谢您的回答。我尝试放弃投票,但为此需要 15 点声望。我不知道如何接受这个答案。
    猜你喜欢
    • 2023-03-22
    • 2018-11-05
    • 2019-12-26
    • 2020-03-11
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多