Spring Integration
- 라이트한 메시징 기반 서비스 제공 및 선언적 어뎁터를 사용해 외부 시스템과의 통합
- Spring Integration Message: 메타데이터와 함께 결합되어 있는 일련의 자바 오브젝트를 위한 포괄적인 레퍼를 말함
- Enterprise Integration Patterns에 나오는 패턴들을 스프링 프레임워크에 구현
- 엔터프라이즈 환경에서 여러 서비스, 애플리케이션 간 발생할 수 있는 작업 플로우를 파이프라인 형식으로 구성할 수 있으며 주어진 시나리오를 커버할 수 있는 적절한 컴포넌트를 적절한 단계에 사용함으로써 재사용성과 테스트성을 높인 프레임워크
Message
- header, payload로 구성되어 있는, 내용을 포함하고 있는 generic wrapper. 컴포넌트 간에 이동되는 실제 데이터이다.
Message Header
Header Name | Header Type |
ID | java.util.UUID |
TIMESTAMP | java.lang.Long |
CORRELATION_ID | java.lang.Object |
REPLY_CHANNEL | java.lang.Object ( can be a String or MessageChannel ) |
ERROR_CHANNEL | java.lang.Object ( can be a String or MessageChannel ) |
SEQUENCE_NUMBER | java.lang.Integer |
SEQUENCE_SIZE | java.lang.Integer |
EXPIRATION_DATE | java.lang.Long |
PRIORITY | java.lang.Integer |
Message Channel
- pipes-and-filters 모델의 pipe
- 컴포넌트간의 메세지 중간 통로 역할
- 하나의 consumer가 메세지를 받을 수 있는 point-to-point
- 다수의 subscriber가 메세지를 broadcast 받을 수 있는 publish-subscribe 모델
- 메세지 채널의 다른 하나의 중요 기능은 메세지 버퍼 역할을 할 수 있는 큐로써 동작
Message Endpoint
- spring integration 상에서 채널을 통해서 메세지를 받고 소비하는 주체
- 엔드포인트란 spring integration이 구성할 파이프라인의 최종 끝단이 아니라, 파이프라인의 중간에서 메세지를 변경하거나 필터링하거나 또는 여러 다른 채널로 라우팅하는 요소
- 작업 타입에 따라 크게 그 종류를 나눔.
Transformer(변형), Filter(필터링), Router(메세지를 특정 채널로 전송), Splitter(메세지를 분리하여 여러 채널로 전송), Aggregator(splitter의 반대), Service Activator(메세지로 특정 작업을 수행할 수 있는 핸들러를 붙일 수 있는 엔드포인트), Channel Adapter(외부 시스템과 입출력이 가능)
Spring Doc
- https://docs.spring.io/spring-integration/reference/html/index.html
Messaging Bridge
<bridge> 엘리먼트와 input-channel, output-channel 어트리뷰트를 사용해서 두 채널이나 채널 어댑터 사이의 메시징 브리지를 설정
1
|
<int:bridge input-channel="input" output-channel="output"/>
|
메시징 브리지는 주로 PollableChannel 타입의 채널을 SubscribableChannel 타입 채널로 연결할 경우 사용, 이경우 설정된 메시징 브리지는 주로 메시지 유입량 조정역할
1
2
3
|
<int:bridge input-channel="pollable" output-channel="subscribable">
<int:poller max-messages-per-poll="10" fixed-rate="5000" />
</int:bridge>
|
위 설정의 경우 poller 설정에 의해 pollable 채널에서 5초에 한번씩 최대 10번의 메시지 폴링작업을 수행해서 subscribable 로 메시지를 전달. 따라서 subscribable 채널은 브리지의 폴러에 의해 유입량을 조정받는다고 볼 수 있음.
output-channel 어트리뷰트를 명시하지 않았을 경우는 인바운드 메시지의 응답 채널 정보를 사용하지만 인바운드 메시지에도 응답 채널정보가 없을 경우는 예외가 발생
(참조) https://springsource.tistory.com/47
(참조) https://springsource.tistory.com/51?category=467920
(참조) https://rura6502.tistory.com/entry/Spring-Integration-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90
'Programing > Spring' 카테고리의 다른 글
Spring-Boot와 호환되는 라이브러리 버전 정보 확인 방법 (0) | 2023.10.24 |
---|---|
Json / Jackson / JsonNode / ObjectNode (0) | 2022.03.24 |
RequestContextHolder (0) | 2022.03.21 |
XML Handler Mapping (0) | 2022.03.11 |
Spring Annotation 활성화 (0) | 2022.03.11 |