我正在使用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),但是事务没有回滚。
请提出建议。
[您正在混合这些术语。分布式事务是与RDBMS关联的术语,而不是与Web服务关联的术语。对于与soap Web服务有关的Web服务WS-TRANSACTION上的事务,有一个Web服务标准。但是该标准几乎未使用。
Web服务上下文中通常使用的Therm是事务补偿,您可以对其进行搜索。补偿的一种非常常见的模式是“尝试取消确认”模式,也有不同的方法。
如果您坚持使用分布式事务,请查看此链接:https://www.atomikos.com/Blog/TransactionalRESTMicroservicesWithAtomikos