在其他jhipster微服务中使用实体

时间:2016-11-05 08:53:23

标签: jhipster microservices

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

2 个答案:

答案 0 :(得分:2)

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

最简单的方法是调用第一个应用程序的端点,通过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直接支持的,需要一些时间才能进入,因为它不是微不足道的。

答案 1 :(得分:1)

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

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

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