2016-11-05 45 views
0

我有问题使用微服务之间的实体,我有microservice1有团队实体我需要在microservice2中使用团队实体,我的意思是我需要在microservice2中导入TeamRepository.java,怎么能做到这一点jhipster?在其他jijster微服务中使用实体

回答

1

你不能这样做,你不应该这样做。您不能试图共享JPA实体和Spring存储库,它完全违背了微服务的目的,就像试图构建分布式整体,这是一种反模式。

每个微服务都有自己的数据库,如果microservice2需要访问一些microservice1数据,它必须通过microservice1 REST API来完成。有关详细信息,请参阅https://github.com/jhipster/generator-jhipster/issues/3649

或者,如果您有这样的需求,它可能是一个强烈的信号,您必须重构您的服务并重新考虑其边界。这是微服务架构中最难的部分。

1

这是一个有广泛答案的问题,因为有几种方法可行。

最简单的方法是调用第一个应用程序的端点,它通过REST API公开您的团队实体。这直接意味着,每当您的第二个服务需要对团队实体进行操作时,它都会通过HTTP检索一个或多个服务。目前这主要是覆盖在UAA配置(使用认证JHipster UAA)

随着UAA,你可以定义非常相似JPA档案库里的东西:

@AuthorizedFeignClient(name = "microservice1") 
public interface TeamClient { 
    @RequestMapping(value = "/api/teams/", method = RequestMethod.GET) 
    List<Team> findTeams(); 

    @RequestMapping(value = "/api/teams/{id}", method = RequestMethod.GET) 
    Team findTeam(@PathVariable("id") Long id); 
} 

看起来你定义库的方式,但是可以通过地狱式的方式与REST合作。它还为您处理安全问题,因此您可以确保只有定义的用户或服务才能访问您的资源。更多关于这个解决方案的信息here

这个策略的优点是它的简单性和现成的可用性来自Spring和JHipster的实现。缺点是,当您的设计迫使您经常使用这些请求时,性能可能会非常低,从而导致巨大的网络负载。

解决此问题的其他方法是使用事件驱动系统,如Spring Cloud Bus,Event-Sourcing,CQRS等......但是,这些选项不是由JHipster直接支持的,需要一些时间才能进入,因为它是不是微不足道的。