我有基于微服务的springboot项目,并使用kong作为api网关。所有服务都在docker容器中。
在我的情况下,我使用servicea循环20次,请求使用jdbctemplate删除serviceb中的记录。前10个请求成功。因此,从serviceb中的postgresql数据库中删除了10条记录。但第11个请求是错误的。所以我想回滚所有10条记录,已成功地从数据库中删除。
我的问题是,在这种情况下我能回滚吗?如果可以回滚,我该怎么办?我应该使用哪种技术?在这种情况下,我可以使用spring cloud stream和kafka回滚吗?
1条答案
按热度按时间ttcibm8c1#
一种选择是使用分布式事务,这是一种非常繁重的方法。。。
另外,你可以改变架构,这也是不完美的建议。
去一些真正的建议。
一般的问题是,如果这是唯一有问题的情况。如果是这样的话-这很容易-以允许在一个操作中进行多次删除的方式扩展api。请看oracle/scim api。所以改变一个组是原子的。当有人需要将用户从一个组移动到另一个组时,问题就开始了。所以也许你可以通过添加一些特殊的方法来处理有问题的案例,比如
patch
?其他所有的。你可以用
command
设计模式,并为每个操作进行还原。这仍然是棘手的,因为不是所有的恢复是可能的,但这在很大程度上取决于您的情况。更新
有一种类似传奇的模式。对于特定的操作,需要准备还原操作。还有一个管理者知道哪里出了问题,需要哪些回复。这是一篇文章。有时是有效的,但是。。。反向操作确实是有问题的操作—比如发送电子邮件。:)