Spring Integration는 <Enterprise Integration Patterns 2003>에서 보여준 대부분의 통합 패턴을 사용할 수 있게 구현한 것
각 Integration 패턴은 하나의 Component로 구현되고 이를 통해 파이프라인으로 메시지가 데이터를 운반한다.
Spring Integration을 사용해서 데이터가 이동하는 파이프 라인으로 다양한 컴포넌트들을 조립할 수 있다.
Components
메시징 시스템은 일반적으로 유사한 "파이프 앤 필터" 모델로 구성
필터는 메시지를 생성하거나 소비할 수 있는 모든 Components를 말한다.
파이프는 필터들 사이에 메시지를 전송하여 Component들 간의 loose coupling을 유지한다.
Message
페이로드와 헤더로 구성되어 있음.
페이로드는 어느 타입이 들어올 수 있으며 헤더에는 ID, 타임스탬프 등 일반적으로 필요한 정보가 들어 있다.
예를 들어, 수신된 파일에서 메시지를 작성할 때 파일 이름은 다운스트림 컴포넌트가 접근할 수 있도록 헤더에 저장된다.
Message Channel
파이프 앤 필터 패턴에서 파이프의 역할. Producer는 채널에 메시지를 보내고 Consumer는 채널로부터 메시지를 받는다.
메시지 채널은 Messaging Conponent를 분리하고 메시지를 가져가고 모니터링하는데 이점을 제공함.
메시지 채널은 point to point 또는 pub-sub로 구성되어 있고 Spring Integration은 이 두개를 다 지원함.
poller를 통해 메시지에 버퍼링을 할 수 있음. 이를 통해 메시지의 Consumer의 과부화를 막을 수 있다.
Message Endpoint
Spring Integration의 주요 목표 중 하나는 IOC를 통해 엔터프라이즈 통합 솔루션 개발을 간소화 하는 것. 예를 들면 Producer와 Consumer를 직접 구현할 필요가 없고, 메시지를 구축하거나 메시지 채널에서 송수신 작업을 직접 할 필요가 없다.
대신 객체를 기반으로 특정 도메인 모델에 집중해야 한다. 그런 다음에 선언된 Configration을 통해 도메인별 코드를 Spring Integration에서 제공하는 Messaging 인프라에 "연결"할 수 있다. 이러한 연결을 담당하는 Component가 Message Endpoints.
비즈니스 로직에서의 Message Endpoint의 역할은 인바운드 요청을 서비스 계층 호출로 변환한 다음 서비스 계층 반환 값을 아웃바운드 응답으로 변환하는 전용 계층이다.
Message Endpoints
파이프 앤 필터 패턴에서 필터의 역할.
프로그램 코드를 메시지 객체나 메시지 채널에 대한 인식이 없게 연결한다. MVC 패턴에서 Controller의 역할과 유사
컨트롤러가 URL 패턴에 매핑되는 것처럼 Message Endpoint도 메시지 채널에 매핑된다. 둘다 프로그램 코드를 인프라에서 격리하는 것이 유사점.
Message Transformer
메시지의 내용 또는 구조를 변환하고 그리고 수정된 메시지를 반환하는 역할을 한다.
보통 메시지의 페이로드를 한 형식에서 다른 형식 (예를 들면 XML에서 java.lang.String으로) 변환하는 역할을 맡는다.
메시지의 헤더 값을 추가,제거 또는 수정할 수 있음.
Message Filter
output channel에 메시지를 전달해야 하는지의 여부를 결정
특정한 페이로드 내용의 타입, property 값, 헤더의 존재 또는 다른 조건을 검사하는 boolean test를 필요로 함.
메시지가 승인되면 output channel에 전송됨. 그렇지 않으면 삭제(또는 예외)된다.
종종 pub-sub 패턴에서 사용되며, 여기서 consumer가 동일한 메시지를 받고 처리할 메시지 포맷을 정의하기 위해 사용된다.
파이프-필터 패턴의 필터와 위의 필터는 다른 개념이다.
Message Router
메시지를 수신할 채널을 결정하는 역할
메시지 내용 또는 메시지 헤더에서 사용할 수 있는 메타데이터에 기반해 수신할 채널을 결정한다.
Splitter
input channal로 부터 메시지를 수신하고 그 메시지를 여러개의 메시지로 분할하여 각각의 메시지를 output channal로 보내는 역할
복합된 페이로드를 나누어 보낼 때 주로 사용된다.
Aggregator
여러 메시지를 수신하여 단일 메시지로 결합하는 역할
파이프라인의 downstream에서 주로 사용
Service Activator
서비스 인스턴스를 메시징 시스템에 연결하기 위한 엔드포인트
인풋 채널을 구성해야 하며 호출할 서비스가 값을 반환하는 경우 아웃풋 채널(선택사항)도 제공
Channel Adapter
메시지 채널을 다른 시스템이나 transport에 연결하는 엔드포인트
일반적으로 메시지와 다른 시스템(파일, HTTP 요청, JMS 메시지)에서 수신되거나 다른 시스템으로 전송되는 모든 객체 또는 자원 간의 매핑을 수행
inbound channel adapter endpoint가 MessageChannel과 연결
outbound channel adapter endpoint는 MessageChannel을 Target에 연결한다.