【发布时间】:2015-12-08 09:14:52
【问题描述】:
我们有microservice 架构,其中大部分microservice 是独立的。但由于某些遗留原因,有一种情况是我们必须从另一个内部调用另一个 microservice。
例如:下面的方法是Legal Service的一部分
@Autowired
public ServiceManager UserServiceManager;
public void updateUserLegalData(){
//do db update of Legal info for the user
userServiveManager.setAcceptedLegal(true);
}
上面有两个db transactions。一个是更新 legalService 数据库,另一个是更新 UserService 数据库。请注意 userService 是在单独的 VM 上运行的 microservice。
我们看到合法服务数据库已更新但对 userService 的调用失败 (Internal server error) 的情况。所以这会使应用程序处于不一致的状态。我们如何以推荐的方式解决此问题?
谢谢
【问题讨论】:
-
如果只有两个服务,那么一种方法是从第一个服务的事务方法调用第二个服务。首先更新本地数据库,然后调用第二个服务。如果第二次调用失败,则抛出异常。这也将导致第一个回滚。如果第二次成功,您很乐意使用 db 状态。
标签: java spring spring-mvc spring-data microservices