如何回滚微服务

问题描述 投票:0回答:1

我怀疑与微服务有关。假设有5个微服务,例如M1,M2,M3,M3,M4和M5。有4个数据库,由4个微服务连接/访问。例如,M2连接到MySql,M3连接到Cassandra,M4连接到MangoDb,M5连接到Oracle。

现在

步骤1:M1调用M2以更新mySql中的某些用户数据,并成功更新然后最终得到了M2的成功响应

步骤2:M1调用M3以更新Cassandra中的某些数据,并成功更新,然后最终得到M3的成功响应

[步骤3:M1调用M4以更新MangoDb中的某些数据,但由于某些数据库服务器问题或任何其他问题而失败。

我的要求是,我想回滚以前的微服务(M2和M3)所发生的数据库更改

要实现这种回滚方案,我们需要做什么?

spring-boot microservices
1个回答
0
投票

您可以确保在整个调用序列中都启用了@Transactional。

  1. 考虑将来自M1的所有微服务作为单个事务调用。
  2. 以以下方式公开回滚:
    • 在更新M2,M3和M4中的数据库时,也将这些值也放置在Spring缓存中与数据库。
    • 在M2,M3或M4中调用/回滚后,从Spring Cache获取值并撤消他们从数据库。
  3. 在hysterix命令的fallbackMethod中,当M1答复错误或某些默认输出时,调用其他服务的/ rollback。

这可能不是一个完美的解决方案,因为它引入了另一个故障点/回滚处理,但是可以实现的最快。

© www.soinside.com 2019 - 2024. All rights reserved.