使用Spring-Boot进行分布式事务回滚

问题描述 投票:1回答:1

我正在使用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个回答
1
投票

[您正在混合这些术语。分布式事务是与RDBMS关联的术语,而不是与Web服务关联的术语。对于与soap Web服务有关的Web服务WS-TRANSACTION上的事务,有一个Web服务标准。但是该标准几乎未使用。

Web服务上下文中通常使用的Therm是事务补偿,您可以对其进行搜索。补偿的一种非常常见的模式是“尝试取消确认”模式,也有不同的方法。

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

© www.soinside.com 2019 - 2024. All rights reserved.