두 가지 엔터프라이즈 통합 패턴은 명령 메시지 와 이벤트 메시지 입니다. 다른 시스템과의 통합뿐만 아니라 서비스 간의 내부 통신을 위해 메시징을 사용하는 시스템에서 작업하고 있습니다. 그것은 궁극적으로 일관된 시스템 이어야하고 , 서비스는 서로에 대해 무지해야합니다 (몇 가지 특수 목적 서비스 제외). 따라서 원격 프로 시저 호출 (RPC 또는 RPI) 과 같은 느낌을 피하려고합니다 . 우리는 버스와 메시지 지향 미들웨어 시스템을 가지고 있으며 모든 메시지가 방송됩니다.
우리는 메시지를 사건으로, 즉 과거에 완벽하게 표현 된 문구로 부르는 경향이 PurchaseOrderShipped
있습니다. 그러나 이벤트는 종종 다른 서비스가 알아야 할 경우에만 추가되며 처음에는 종종 하나의 서비스 만 처리합니다. 또한 때때로 해당 서비스에서 이벤트가 발생하여 첫 번째 서비스에서 청취합니다. 따라서 상호 작용을 다이어그램으로 만들면 위의 링크에서 명령 메시지에 대한 다이어그램 (또는 RPC 다이어그램)이 이벤트 메시지에 대한 다이어그램과 훨씬 비슷해 보이지만 실제로는 다음과 같이 구현되지 않습니다. 직접 메시지를 보내지 만 버스에서 브로드 캐스트합니다. 최근에 명령으로 명명 된 일부 메시지, 즉 명령의 문구, 예를 들어 보았습니다 BillShippedPurchaseOrder
.
이상한 것은 메시지의 이름과 메시지의 흐름이 이벤트인지 명령인지에 따라 변경되지 않는다는 것입니다. 그렇다면 어떤 것이 명령 메시지인지 이벤트인지를 어떻게 결정합니까? 이것은 시맨틱과 이름의 차이 일까, 아니면 명령과 이벤트 메시지 사이에 실제 구현 차이가 있는가? 우리의 모든 메시지가 방송된다는 것을 감안할 때, 이것이 진정한 명령 메시지가 아님을 의미합니까?
request for information
기능을 어떻게 구현 합니까?getUserInfo(uid)
응답을 기대하는 명령 메시지 와 같은 것을 사용하는 것이 자연 스러워 보입니다. 명령 메시지가 커플 링을 도입한다는 것을 알고 있지만 슬프게도 이벤트 메시지로 구현하는 방법을 알 수 없습니다. 아니면 이런 경우에 명령 메시지를 고수하는 것이 좋습니까?