2017-11-22 5 views
0

서비스 간의 메시징에 사용되는 여러 가지 방법을 이해하려고합니다.서비스 사이의 메시징 이벤트 대 명령

사용자가 제품 생성을 요청했다는 것을 다른 사람에게 알리는 첫 번째 서비스가 필요한 시나리오가 있고 두 번째 서비스에서이 메시지를 받고 제품을 만든 다음 첫 번째 서비스에 대해 제품이 생성되었습니다.

첫 번째 서비스가 특정 서비스를 처리해야하고 피드백을 기다릴 것이므로 요청/응답과 함께 명령이이 시나리오에 적합하다고 생각합니다.

  • 는 서비스 간의 느슨한 결합을 제공 : 명령 대

    이벤트 :

    이벤트

    나의 이해는 점이다.

  • 은 모든 대기열에 게시를 수행하며 해당 메시지에 관심이있는 서비스는 해당 대기열을 선택합니다.

명령 :

  • 특정 큐로 소비 것이다 큐를 이용하여 수신 따라서 만 서비스를 전송하는 수행한다.

요청// 응답 VS 게시 Subsribe :

요청/응답합니다 : 요청에

/응답이에서 반환 될 때까지 작업을 기다립니다 수행하기 위해 다른에서 첫 번째 서비스 요청을 응답 나중에.

게시/구독 :

첫 번째 서비스는 단지 메시지를 게시하고 의견이나 응답을 기다리지 않고 처리를 계속합니다.

게시/구독 방법으로 이벤트를 따르는 것으로 보이는 Masstransit saga (Masstransit.Automatonymous)와 함께 RabbitMQ를 사용하여 메시징 시스템을 디자인하기 시작했습니다.

내 질문은 :

내가 요청에 게시하거나 이벤트와 명령을 사용할 수 있습니다/응답?

내 이해가 정확합니까? 요청/응답과 함께 사용할 수 있습니까?

답변

2

일반적으로 귀하의 이해가 정확합니다. 그러나 여기에서도 요약 할 것입니다 :

  • 이벤트는 pub/sub에서 사용됩니다. 메시지가 게시되고 모든 구독자가 메시지를받습니다. 게시자는 얼마나 많은 구독자가 이벤트를 받을지 알 수 없습니다.
  • 명령이 알려진 주소로 보내집니다. 이 메시지를받는 가입자는 단 하나입니다.이것은 화재와 잊기 위해 사용됩니다.
  • 응답은 응답 주소와 같은 추가 메타 데이터와 함께 특정 끝점으로 전송됩니다. 따라서 소비자는해야 할 일을하고 답장을 보낼 수 있습니다. 이것은 비동기 적으로 수행되지만 송신자는 응답을 기다립니다.

Automatonymous가 포함 된 MassTransit sagas는 모든 유형의 메시지 처리를 지원합니다. 사가가 소비하는 모든 메시지를 상태 머신 이벤트로 매핑해야하지만, 이는 명령과 이벤트가 될 수 있습니다. 기술적으로는 중요하지 않습니다. Sagas는 메시지를 게시하고 보낼 수 있으며 요청을 보내고 응답을 기다릴 수도 있습니다.

요청 게시에 대한 명령 게시 및 이벤트 사용에 관해 질문 할 때. Techicanlly, MassTransit은 메시지 유형을 구별하지 않습니다. 게시하는 모든 것은 하나의 이벤트입니다. 보내는 물건은 명령 일 수도 있고 다른 일일 수도 있습니다. 그러나 이것은 이벤트가 아닙니다. 요청 - 응답을 사용할 때 특정 끝점으로 보내야하므로 명확히 이것은 이벤트가 아닙니다.

+0

설명해 주셔서 감사합니다. "사가는 상태 머신 이벤트로 소비되지만 명령과 이벤트가 될 수 있습니다."즉, 사가에서 정의한 이벤트 유형은 메시지를 보내는 방식에 따라 이벤트 나 명령이 될 수 있습니다 ? –

+0

예, 소비자 관점에서 볼 때 (사가는 소비자 집단 일뿐입니다) 이벤트와 명령간에 차이는 없습니다. 단지 메시지 일뿐입니다. 분리는 논리적입니다. –

+0

다시 한번 고마워. 당신은 사가와 명령으로 샘플 프로젝트를 접하게 되었습니까? –