我有基于微服务构建的 spring boot 项目,并使用 KONG 作为 api 网关。所有服务都在 Docker 容器中。
在我的情况下,我使用 serviceA 循环 20 次,通过 jdbcTemplate 请求删除 serviceB 中的记录。前 10 个请求成功。所以从serviceB 的postgresql 数据库中删除了10 条记录。但是第 11 个请求是错误的。所以我想回滚从数据库中成功删除的所有 10 条记录。
我的问题是在这种情况下我可以回滚吗?如果可以回滚,我该怎么做?我应该使用哪种技术?这种情况可以用Spring cloud stream和Kafka来回滚吗?
最佳答案
一种选择是使用分布式事务,这是一种相当繁重的方法...
除此之外,您可以更改架构,这也不是完美的建议。
寻求一些真正的建议。
这里的一般问题是,如果这是唯一有问题的情况。如果是这样 - 那很容易 - 以允许在一次操作中进行多次删除的方式扩展您的 API。请查看 Oracle/Scim API .所以改变单个组是原子的。问题开始了,当有人将用户从一个组移动到另一个组时。因此,也许您可以通过添加特殊方法来处理有问题的情况——比如提供的 patch
?
除此之外。您可以使用 command
设计模式并为每个操作恢复。这仍然很棘手,因为并非所有还原都是可能的,但这在很大程度上取决于您的情况。
更新
有类似 Saga 模式的东西。对于特定操作,准备了还原操作。并且有一位经理知道出了什么问题,需要哪些恢复。 Here是关于这个的文章。有时它可以工作,但是......逆转确实是有问题的操作 - 比如发送电子邮件。 :)
关于postgresql - jdbcTemplate如何在微服务上部分http请求成功部分http请求失败时回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53151527/