2017-12-05 4 views
4

java를 사용하여 두 개의 마이크로 서비스를 만들었습니다. 서비스 A에서 서비스 B로 REST API 호출을해야합니다. 보낸 데이터는 JSON 형식입니다. jax-rs를 사용하면 두 서비스 모두에서 엔티티 클래스를 생성해야합니다.두 개의 마이크로 서비스 간 REST 서비스간에 엔티티를 공유하는 방법은 무엇입니까?

두 엔티티 클래스가 두 프로젝트에서 동일하기 때문에. Do i

  • 공통 항아리를 만들고 모든 엔티티/도메인 객체를 사용합니까? 이게 내 마이크로 서비스를 더욱 밀접하게 결합 시켰습니까?
  • 마이크로 서비스 프로젝트 모두에서 동일한 클래스를 만드나요? 이것은 두 프로젝트에서 작업을 반복한다는 것을 의미 할 것입니까?

서비스 간 통신 방법이 더 좋습니까?

+4

엔티티 개체의 공통 항아리에 문제가없는 것으로 보입니다. 외부 API 라이브러리를 사용하는 것과 같은 생각입니다. –

+0

hecko84가 지적한 공통 항아리의 문제점은 실제라고 생각합니다. 이제이 와트는 좋은 문제처럼 보입니다. –

답변

0

이것은 개발자로서 우리가 혼란스러워하는 일반적인 상황입니다. 나는 마이크로 서비스 (A와 B) 모두에서 사용할 수있는 공통 항아리 (공유)를 제안 할 것이다. 타사 라이브러리를 사용할 때 세 번째 리소스를 공유하는 것입니다. 내 현재 프로젝트에서 우리는 같은 상황에 있었고 개별적인 공유 라이브러리 (api-shared을 이름으로 함)를 사용하고 다른 마이크로 서비스에서 jar로 사용하는 것이 가장 좋습니다.

두 번째 접근법에서는 중복 코드가 발생하여 유지 관리하기가 어렵습니다. 엔티티에 변경 사항이있는 경우 두 엔티티를 모두 변경해야합니다. 두 엔티티를 동기화하는 것이 좋지 않습니다.

모두 나는 마이크로 서비스 모두를 위해 공유 jar를 사용하도록 제안합니다.

감사

테크노

2

독립 당신이 개 마이크로 서비스를 가진하고 내가 또한 코드를 복제 할 미래에 독립적 데의 측면에서. 이전과 똑같은 상황이었습니다. 여러 마이크로 서비스는 별도의 병에 넣을 수있는 "공통"클래스를 사용하는 것 같습니다. 결국 우리는 다음과 같은 상황을 겪었습니다 : - 동일한 JAR을 사용하는 여러 개의 (5+) 서비스 - 우리가 생각한 클래스가 다른 서비스에서 약간 다른 의미를 가진 것으로 나타났습니다. - 클래스가 더 많거나 적게 우리가 모든 마이크로 서비스에 릴리스를 강요 당했을 때 (더 이상 여기서는 독립성이 없음) - 개발자는 "일반적인"동작을 모든 곳에서 보려는 경향이 있습니다. 따라서 "Helper/Utility "한편 OOP에서 코드 냄새라고 여겨지는 클래스도 있습니다.

짧은 코드로 코드를 복제하면 코드가 중복되어 정말 독립적으로 우리의 mircoservices를 처리 할 수 ​​있습니다. 필요하다 서비스 계약에 충실하십시오. 내부적으로 발생하는 일은 완전히 서비스에 달려 있으며 반복이 끝나면 모든 서비스를 해제 할 필요가 없습니다. 나는 다른 옵션이 잘못되었다는 말은 아니지만 그것이 우리에게 적합하지 않다는 것이 밝혀졌습니다. 두 서비스 사이에 공통적 인 클래스가 실제로 표시되면 공통 라이브러리를 다른 쓰레기와 함께 엉망으로 만들지 말고 확실한 결과를 얻을 수 있습니다.

편집

아마 후속 조치로, 우리는 몇 가지 일반적인 클래스에서 테스트 (단위 및 통합)를 갖는 주 테스트 코드의 안부 같은 논의를했다.결국 코드 또는 승인 기준의 모든 미세한 변화가 테스트의 50 %를 실패로 만들면서 이것은 지옥이었습니다. 한편 우리의 전략은 테스트 레벨에서 아무 것도 공유하지 않고 테스트 장소에서 모든 것을 갖추는 것입니다. 이를 통해 테스트를 제거하거나 변경하는 데 빠르다. 결국 우리를위한 교훈은 비즈니스 코드를 적절하고 깔끔하고 우아한 것으로 유지하는 것이었고 테스트 코드는 가능한 한 가장 적은 두통을 줄 수있는 방법이었습니다.

0

나는 그것이 상황에 달려 있다고 말할 것입니다. 공유 패키지를 사용하는 경우 두 프로젝트간에 커플 링이 도입됩니다. 두 프로젝트가 동일한 데이터 클래스를 기반으로하므로 동일한 dto 객체를 사용할 수 있습니다. 이상적으로 공유 된 인공물의 사용을 단순화하는 고유 한 넥서스가 있습니다. 그렇지 않으면 몇 가지 클래스가 중복되는 경우 각 서비스에서 개별적으로 구현하므로 클래스가 너무 분리됩니다.

귀하의 프로젝트에 맞는 솔루션을 결정해야 할 필요가 있습니다.