我正在学习使用Spring Boot进行分布式事务回滚。我使用的是带有JPA和H2数据库的springboot 2.2。在我的示例中,我有三个在不同端口上运行的微服务,它们有自己的H2数据库。
微服务A-http://localhost:2222/savePersonBasicDetails
微服务B--http://localhost:3333/savePersonAddress
微服务C---http://localhost:4444/savePersonHobbies
从MicroserviceA,我将获得Person_Id,我将把它连同它们各自的数据一起发送给剩下的两个微服务。如果任何一个微服务失败,那么我想回滚整个事务。
示例:
save(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服务相关的术语。与soap Web服务相关的Web服务WS-TRANSACTION上的事务有一个Web服务标准。但这一标准大多未被使用。
在web服务的上下文中通常使用的热是事务补偿,你可以搜索它。一个非常常见的补偿模式是尝试取消确认模式,也有不同的解决方案。
如果您坚持使用分布式事务,请查看此链接:https://www.atomikos.com/Blog/TransactionalRESTMicroservicesWithAtomikos