문제

SOA 또는 미들웨어를 언급 할 때 메시지 중심과 이벤트 중심 환경 사이에 분명한 구분이 있는지, 일반적으로 응용 프로그램 및 엔터프라이즈 통합의 경우 분명한 차이가 있는지 궁금합니다. 사용자 인터페이스는 시스템이 사용자의 작업을 가로 채는 이벤트 중심 모델과 유사하다는 것을 이해합니다.

또한 메시징은 게시/구독, Sychronous 또는 비동기 통신, 거래 등을 기반으로 한 시스템을 지원한다는 것은 분명합니다.

그러나 미들웨어/SOA/애플리케이션 intergration 컨텍스트에 차이가 있습니까? (건축 수준). 나는 Wikipedia와 같은 출처를 상담하려고합니다 (여기, 그리고 여기),하지만 나는 여전히 다소 혼란스러워합니다. 개발자는 언제 다른 솔루션보다 하나의 솔루션을 선호해야합니까?

한 접근법이 다른 접근법보다 더 의미가있는 예 또는 사례가 있습니까? 아니면 각각의 자원과 가이드가 구현되는 포괄적 인 자원과 안내서가 있습니까?

통찰력에 감사드립니다.

도움이 되었습니까?

해결책

"명확한 차이가 있습니까"에 대한 짧은 대답은 "아니오"입니다.

이 용어는 상호 교환 할 수 없지만 동일한 기본 아키텍처, 특히 이벤트 나 메시지를 트리거 할 것임을 암시합니다.

첫 번째 기사는 귀하를 대신하여 메시지를 전달하는 저수준 배관, 엄마 또는 펍 서브 "버스"에 관한 것입니다. 이벤트 중심의 아키텍처는 해당 프레임 워크 위에 구축하는 것입니다.

이벤트 중심이라는 용어는 GUI 코드에도 적용되지만 실제로는 같은 수준의 추상화가 아닙니다. 이 경우 메시지/이벤트 구동 라인을 따라 전체 엔터프라이즈를 구축하는 것과 비교할 때 작은 패턴입니다.

다른 팁

여기에 있습니다 TypeSafe/반응성 Jonas Bonér의 질문에 대한 견해. 세 번째 단락에서 이 블로그 게시물:

차이점은 메시지가 지시되고 이벤트가 아닙니다. 메시지에는 명확한 주소 수신자가 있고 이벤트는 다른 사람들이 이벤트를 관찰 할 수 있습니다.

이 질문은 오래 전에 질문을 받았습니다. 나는 더 현대적이고 명확한 반응이 반응성 선언 안에 메시지 중심 (이벤트 중심과 대조):

메시지는 특정 대상으로 전송되는 데이터 항목입니다. 이벤트는 주어진 상태에 도달했을 때 구성 요소에 의해 방출되는 신호입니다. 메시지 중심 시스템에서 주소 수신자는 메시지의 도착을 기다리고 그에 반응합니다. 그렇지 않으면 휴면 상태가 있습니다. 이벤트 중심의 시스템 알림 리스너는 이벤트가 방출 될 때 호출되도록 이벤트 소스에 첨부됩니다. 이는 이벤트 중심 시스템이 주소 가능한 이벤트 소스에 중점을두고 메시지 중심 시스템은 주소 수신자에게 집중 함을 의미합니다. 메시지는 인코딩 된 이벤트를 페이로드로 포함 할 수 있습니다.

이벤트 중심의 아키텍처는 메시징 유무에 관계없이 구현 될 수 있습니다. 메시징은 생산자가 제기 한 이벤트를 소비자에게 신뢰할 수 있고 보장 된 방식으로 전달하는 한 가지 방법입니다. 특히 생산자와 소비자가 진정으로 분리되어 다른 서버 / VMS / 환경에서 호스팅 될 수 있으며 공유 메모리에 직접 액세스 할 수없는 경우.

그러나 특정 경우 - 이벤트 소비자가 동일한 응용 프로그램 자체에 등록 된 함수 / 콜백 인 경우 또는 소비자를 동기로 실행 해야하는 경우 메시징없이 이벤트 - 보물을 구현할 수 있습니다.

전자 상거래 웹 사이트에 대한 결제 서비스를 구축한다고 가정 해 봅시다. 주문이 배치되면 주문 서비스는 지불 서비스에 고객의 신용 카드를 승인하도록 요청합니다. 신용 카드가 승인 된 경우에만 주문 서비스는 주문을 포장 및 배송을 위해 Warehouse에 보내는 것입니다.

신용 카드 승인 요청이 귀하의 서비스에서 귀하의 서비스로 전송되는 방법에 대해 주문 서비스를 작업하는 팀과 동의해야합니다. 두 가지 옵션이 있습니다.

  • 메시지 중심: 주문이 배치되면 주문 서비스는 지불 서비스에 승인 요청을 보냅니다. 서비스는 요청을 처리하고 주문 서비스에 성공/실패를 반환합니다. 초기 요청과 결과는 동기식 또는 비동기 적으로 보낼 수 있습니다.
  • 이벤트 중심: 주문이 배치되면 주문 서비스는 Neworder 이벤트를 게시합니다. 결제 서비스는 해당 유형의 이벤트에 가입하므로 트리거됩니다. 귀하의 서비스는 요청을 처리하고 권한 부여 또는 권한 부여 된 이벤트를 게시합니다. 주문 서비스는 해당 이벤트 유형에 가입합니다. 모든 이벤트는 비동기입니다.

이벤트 중심의 접근 방식의 장점 다른 서비스는 다양한 이벤트를 구독 할 수 있다는 것입니다. 예를 들어, 승인 된 이벤트에 가입하고 재무 팀에 대한 보고서를 작성하는 RevenueReporting 서비스가있을 수 있습니다.

이벤트 중심의 접근 방식의 단점 시스템 전체가 이해하기가 조금 어려워진다는 것입니다. 예를 들어, 주문 서비스에서 작업하는 팀이 신용 카드가 거부 된 이유 (자금, 계정 폐쇄, 청구서 주소가 잘못된 주소 등)에 따라 권한 부여 대상 이벤트를 다른 이벤트로 교체하도록 요청한다고 가정 해 봅시다. 인증 된 이벤트 게시를 중단하면 다른 서비스를 중단할까요? 많은 이벤트와 서비스가있는 경우 추적하기 어려울 수 있습니다.

잘게 갇히게됩니다 이것 기사에서, 이벤트 중심 디자인을 이해하기 위해, 그것이 제시하는 것을 보는 대신, 우리는 그것이 숨겨지는 것을 관찰해야하며, 그것은 매우 기본적인 프로그래밍에 지나지 않습니다. "통화 스택".

이벤트 중심 디자인에서 메소드 호출의 정의가 창 밖으로 나옵니다. 더 이상 발신자와 칼리가 없습니다. 그것은 시퀀스와 순서를 호출하는 키스 작별 인사입니다. 시스템은 어떤 순서가 발생 해야하는지 알 필요가 없습니다. 따라서 콜 스택의 전제 조건 인 공유 메모리 공간은 불필요 해집니다.

그러나 통화 스택 환경에서 발신자는 다음에 어떤 일이 발생하는지 알아야 할뿐만 아니라 기능을 메소드 이름에 연결할 수 있어야합니다.

메시지 지향 응용 프로그램은 기본적으로 공유 메모리를 제거합니다. 게시자와 가입자는 메모리 공간을 공유 할 필요가 없습니다. 반면에, 다른 모든 기능 (예 : 순서, 메소드 이름 커플 링 등)은 필수가 아닙니다.

이벤트 구동 아키텍처의 공리를 준수하기 위해 메시지 전달이 설계된 경우 동일하게 간주 될 수 있습니다. 그렇지 않으면 그들 사이에 큰 차이가 있습니다.

이벤트 중심 접근 방식을 사용하는 경우 일반적으로 이벤트에서 이벤트를 게시 한 구성 요소에서 소스 개체를 보내려고합니다. 따라서 가입자에서는 데이터뿐만 아니라 누가이 이벤트를 게시했는지 알 수 있습니다. 예를 들어 모바일 개발에서 우리는 버튼, 이미지 또는 사용자 정의보기 일 수있는보기를받습니다. 이보기의 유형에 따라 가입자에 다른 논리를 사용할 수 있습니다. 이 경우 백 프로세싱을 추가하고 소스 구성 요소를 수정할 수도 있습니다. 예를 들어 해당 소스보기에 애니메이션을 추가하십시오.

메시지 중심 접근 방식을 사용하면 일부 데이터와 함께 메시지 만 게시하려고합니다. 이 메시지를 게시 한 가입자에게는 중요하지 않습니다. 우리는 단지 데이터를 수신하고 It Wayway를 처리하고 싶습니다.

이벤트 중심의 아키텍처와 메시지 구조 아키텍처는 두 가지 다른 것이며 두 가지 다른 문제를 해결합니다.

이벤트 중심의 아키텍처 초점은 시스템이 작동하도록 트리거되는 방식에 중점을 둡니다. EDA의 맥락에서 사건으로 생각되는 대부분의 트리거는 키보드 및 마우스 이외의 수단으로 생성 된 이벤트입니다. 이벤트 생성기, 이벤트 채널, 이벤트 처리 엔진에 대해 명시 적으로 생각하게 만드는 EDA입니다.

키보드와 마우스는 명백한 이벤트 생성기이지만 이러한 이벤트 처리는 이미 다양한 프레임 워크 또는 런타임에 의해 처리되고 있으며 건축가로서 우리는 이에 대해 걱정할 필요가 없습니다. 특정 도메인에 특정한 다른 이벤트가 있습니다. 건축가가 생각하는 것입니다. 예-공급망 관리 이벤트-산업 IoT 유형의 응용 프로그램 유형에 대한 기술적 관점에서 픽, 팩, 파견, 배포, 소매 업체, 판매 등은-RFID 읽기, 바이오 메트릭 읽기, 센서 데이터, 시스템 생성 이벤트입니다. 이러한 이벤트가 시스템의 기능을 주도하기 때문에 명시 적으로 관리 해야하는 이벤트입니다.

메시지 중심 아키텍처 초점은 표준 메시지 지향 미들웨어를 사용하여 한 모듈에서 시스템의 다른 모듈로 메시지를 전달하여 분산 시스템을 통합하는 것입니다.

메시지 개념은 추상적이며보다 구체적인 메시지 유형의 메시지는 이벤트와 명령입니다.

메시지에는 특별한 의도가 없지만 이벤트는 일어난 일에 대해 알려줍니다. 명령은 (미래에) 일어날 무언가를 트리거합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top