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

在其他jhipster微服务中使用实体,jhipster,microservices,Jhipster,Microservices,我无法在微服务之间使用实体,我有微服务1有团队实体我需要在微服务2中使用团队实体,我的意思是我需要在微服务2中导入TeamRepository.java,如何使用jhipster做到这一点?你不能这样做,也不应该这样做。你不能试图共享JPA实体和Spring存储库,这完全违背了微服务的目的,就像试图构建一个分布式整体,这是一种反模式 每个微服务都有自己的数据库,如果微服务2需要访问一些微服务1数据,则必须通过微服务1 REST API进行访问。有关如何执行此操作的详细信息,请参阅 或者,如果您有

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

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

每个微服务都有自己的数据库,如果微服务2需要访问一些微服务1数据,则必须通过微服务1 REST API进行访问。有关如何执行此操作的详细信息,请参阅


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

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

每个微服务都有自己的数据库,如果微服务2需要访问一些微服务1数据,则必须通过微服务1 REST API进行访问。有关如何执行此操作的详细信息,请参阅


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

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

最简单的方法是调用第一个应用程序的端点,该应用程序通过RESTAPI公开团队实体。这直接意味着,每当您的第二个服务需要对团队实体执行某些操作时,它都会通过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);
}
@AuthorizedFeignClient(name=“microservice1”)
公共接口团队客户端{
@RequestMapping(value=“/api/teams/”,method=RequestMethod.GET)
列出findTeams();
@RequestMapping(value=“/api/teams/{id}”,method=RequestMethod.GET)
团队findTeam(@PathVariable(“id”)长id);
}
它看起来像是您定义存储库的方式,但实际上与REST一起工作。它还为您处理安全问题,因此您可以确保只有已定义的用户或服务可以访问您的资源。有关此解决方案的更多信息

这种策略的优势在于它的简单性和spring和JHipster的现成实现。缺点是,当您的设计迫使您过于频繁地使用此类请求时,这可能会导致相当低的性能,从而导致巨大的网络负载


解决这一问题的替代方法是使用事件驱动系统,如Spring Cloud Bus、事件源、CQR等。然而,JHipster不直接支持这些选项,需要一些时间才能进入,因为这不是一个微不足道的问题。

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

最简单的方法是调用第一个应用程序的端点,该应用程序通过RESTAPI公开团队实体。这直接意味着,每当您的第二个服务需要对团队实体执行某些操作时,它都会通过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);
}
@AuthorizedFeignClient(name=“microservice1”)
公共接口团队客户端{
@RequestMapping(value=“/api/teams/”,method=RequestMethod.GET)
列出findTeams();
@RequestMapping(value=“/api/teams/{id}”,method=RequestMethod.GET)
团队findTeam(@PathVariable(“id”)长id);
}
它看起来像是您定义存储库的方式,但实际上与REST一起工作。它还为您处理安全问题,因此您可以确保只有已定义的用户或服务可以访问您的资源。有关此解决方案的更多信息

这种策略的优势在于它的简单性和spring和JHipster的现成实现。缺点是,当您的设计迫使您过于频繁地使用此类请求时,这可能会导致相当低的性能,从而导致巨大的网络负载


解决这一问题的替代方法是使用事件驱动系统,如Spring Cloud Bus、事件源、CQRS等。然而,JHipster不直接支持这些选项,并且需要一些时间才能进入,因为这不是一件小事。

这些解决方案在使用KeyPope时也适用吗?这些解决方案在使用KeyPope时也适用吗?