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

Distributed transaction rollback with Spring-Boot

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

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

从微服务 A 中,我将获得 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),但事务没有回滚。

请指教

您在混淆这些术语。分布式事务是与 RDBMS 相关的术语,而不是与 Web 服务相关的术语。有一个 web 服务标准用于与 soap web 服务相关的 web 服务 WS-TRANSACTION 上的交易。但是这个标准基本上没有被使用。

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

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