@transactional在带有微服务的服务类中

92vpleto  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(763)

我在microservices下工作,使用@transactional,遇到了一个疑问:假设我在服务类上编写了@transactional,它在内部为数据库操作调用不同的microservices。现在假设其中一个微服务失败了,其他微服务的数据库状态会发生什么变化,因为它们已经提交了自己的数据库,或者回滚将如何发生?
示例代码如下

@Transactional
@Service
class MySerivce{
    public void method(){
        // call microservice1
        // call microservice 2 (fails or give error)
    }
}

请分享知识。谢谢!

h79rfbju

h79rfbju1#

这两个微服务和您的应用程序是独立的系统。 @Transactional 仅管理应用程序的本地事务。它不知道如何管理它调用的其他微服务的事务(也不可能做到这一点,否则你会像黑客一样攻击其他微服务……)
因此,如果microservice2失败,那么回滚已经在microservice1上完成的所有操作将无济于事。你必须手动处理。microservice1需要提供api来撤销这样的操作,然后您需要手动捕获microservice1抛出的异常并调用这个api来应用补偿操作。
一种称为saga模式的模式就是为了解决这个问题。你可以在谷歌上搜索更多信息。

相关问题