2016-12-26 6 views
1

메시징 아키텍처를 사용하는 마이크로 서비스 간의 통신을 해결하고 있습니다.메시징 아키텍처를 사용하여 보낸 사람에게 메시지를 다시 보내는 방법은 무엇입니까?

내가 전통 응용 프로그램을 가지고 있고, User, PostVideo 모듈이 있다고 가정 해 봅시다.

게시물과 동영상을 만들 수는 있지만 그 전에는 사용자 이름을 사용자 ID로 변환해야합니다. 내가 microservice에 모듈을 분리하면

enter image description here

은, 우리가 직접하는 대신 microservices를 방문, 그들을 함께 체인 수 없습니다.

enter image description here

그리고 내가 ID에 사용자 이름을 변환 할 경우

,

는 지금까지 너무 좋아, 메시징을 통해 Post 서비스의 User 서비스를 호출 할 수 있습니다.

  • 가 어떻게 변환 된 사용자 ID을 받는가 :

    enter image description here

    그러나 여기에 문제입니까? Post 서비스로 다른 메시지를 다시 보내고 다음 단계를 계속 진행 하시겠습니까?

  • Video 서비스에서 어떻게해야합니까? User 서비스에서 다른 기능을 만들어야합니까?

점점 더 많은 서비스가 제공된다면 그것은 많은 기능이 될 것입니까?

메시징 아키텍처가 작동하는 방식이 아닌 것 같지만 메시징없이 다른 서비스와 통신하는 방법을 알지 못합니다.

(아니면 내가 chain them together in the API Gateway이되어야 메시징 아키텍처가 필요하지 않습니까?). 사용자, 포스트, 비디오 :

내가 이해 한 것과

enter image description here

+0

질문을 올바르게 이해할 수 있을지 모르겠지만 회신 패턴을 사용 해본 적이 있습니까? http : // www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReplyJmsExample.html –

답변

1

, 당신은 3 개 서비스가 있습니다. 포스트 및 비디오 서비스에서는 사용자 이름을 인수로 사용하지만 userId는 포함하지 않는 명령을 구현해야합니다. 그리고 이러한 서비스의 모든 데이터가 userId와 상관 관계가 있으므로 사용자 서비스를 먼저 호출하여 관련 userId를 요청하려고합니다.

대답은 다음과 같습니다.이를 요구하는 모든 서비스에 username-userId 연결을 저장해야합니다.

특정 경우 포스트 서비스와 비디오 서비스는 모두 사용자 서비스의 NewUserRegistered 이벤트에 가입하고 자신의 username-userid 맵을 유지 관리해야합니다. 이렇게하면 다른 서비스에서 User 서비스에 대한 추가 호출을 피할 수 있습니다.

+0

사용자가 1,000 명인 경우 각 서비스 (각 서비스는 데이터베이스를 소유하고 있음)에 저장해야하므로 '1,000 * 3'(사용자 + 게시 + 비디오), 중복 행이 많을 것입니다. –

+1

예, 데이터의 비정규 화 및 복제는 분산 시스템에서 일반적인 관행입니다. – IlliakaillI

+1

하지만 모든 데이터는 복제하지 않고 각 특정 서비스에 필요한 데이터 만 복제합니다. 귀하의 경우 그것은 사용자 테이블에서 단지 2 필드입니다 – IlliakaillI