postgresql - jdbcTemplate如何在微服务上部分http请求成功部分http请求失败时回滚

标签 postgresql spring-boot apache-kafka microservices spring-cloud-stream

我有基于微服务构建的 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/

相关文章:

mysql - 在Linux(Kubuntu)上从MySQL迁移到PostgreSQL

java - Spring Boot 单元测试模块未检测到 Autowiring 的组件

spring-boot - AWS Postgres RDS数据库与Spring Boot的连接

hadoop - Spark : ClassNotFoundException when running KafkaWordCount example

python - 在 GeoDjango 中将多多边形层与多边形相交

ruby-on-rails - Rails 查询数据库列忽略空格

spring-boot - Spring Boot服务中@Value过多的解决方法

apache-kafka - kafka组协调器如何确定它已收到所有JoinGroup请求?

java - 为 kafka 编写我们自己的自定义分区器

postgresql - Heroku PostgreSQL - 如何在没有证书的情况下发生 SSL 连接?