2016-11-05 3 views
0

마이크로 서비스 사이에 엔티티를 사용하는 데 문제가 있습니다. 마이크로 서비스 1을 사용했습니다. 팀 엔티티를 사용해야합니다. microservice2에서 팀 엔티티를 사용해야합니다. microservice2에서 TeamRepository.java를 가져와야합니다. 어떻게 할 수 있습니까? 지프 스터?다른 jhipster 마이크로 서비스의 엔티티를 사용합니다

답변

1

당신은 그렇게 할 수 없으며 그렇게해서는 안됩니다. JPA 엔티티와 Spring 저장소를 공유해서는 안되며, 마이크로 서비스의 목적을 완전히 무효로합니다. 분산 된 단일체를 만드는 것과 같습니다. 그것은 반 패턴입니다.

각 microservice에는 고유 한 데이터베이스가 있으며 microservice2가 microservice1 데이터 중 일부에 액세스해야하는 경우 microservice1 REST API를 통해 수행해야합니다. 자세한 방법은 https://github.com/jhipster/generator-jhipster/issues/3649을 참조하십시오.

이와 같은 요구가있는 경우 서비스를 리팩터링하고 경계를 다시 고려해야한다는 강력한 신호가 될 수 있습니다. 이것은 마이크로 서비스 아키텍처의 가장 어려운 부분입니다.

1

여러 가지 방법이 있으므로 질문의 범위는 다양합니다.

가장 간단한 방법은 REST API를 통해 팀 엔티티를 노출하는 첫 번째 앱의 끝점을 호출하는 것입니다. 즉, 두 번째 서비스가 팀 엔티티로 무엇인가를해야 할 때마다 HTTP를 통해 하나 이상의 정보를 검색합니다. 그것은 당신이 저장소를 정의하는 방법과 같은

@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); 
} 

: 이것은 현재 대부분 UAA와

, 당신은 단지 JPA 저장소에 매우 비슷한 정의 할 수 있습니다 (인증 JHipster의 UAA 사용) UAA 구성에 덮여있다 ,하지만 REST와는 열심히 일합니다. 또한 보안 기능을 처리하므로 정의 된 사용자 또는 서비스 만 리소스에 액세스 할 수 있습니다. 이 솔루션에 대한 추가 정보 here

이 전략의 장점은 스프링과 JHipster의 사용이 간편하고 구현이 간편하다는 것입니다. 단점은 디자인이 너무 자주 그러한 요청을 사용하도록 강요 할 때 성능이 매우 낮아질 수 있기 때문에 엄청난 네트워크 부하가 발생한다는 것입니다.

Spring Cloud Bus, Event-Sourcing, CQRS 등과 같은 이벤트 기반 시스템을 사용하는 대안이 있습니다. 그러나 이러한 옵션은 JHipster에서 직접 지원하지는 않으며 들어가기까지 시간이 필요합니다. 사소하지 않아.