티스토리 뷰
반응형
1. 스프링 통합 Spring Integration
스프링 통합은 Enterprise Integration Patterns (구글에서 검색하면 논문이 나온다) 에서 보여준 대부분의 통합 패턴을 사용할 수 있게 구현한 것이다. 각 통합 패턴은 하나의 컴포넌트로 구현되며, 이것을 통해서 파이프라인으로 메시지가 데이터를 운반한다. 스프링 굿어을 사용하면 데이터가 이동하는 파이프라인으로 이런 컴포넌트들을 조립할 수 있다.
2. 간단한 통합 플로우 선언하기
- 통합 플로우를 통해 외부 리소스나 애플리케이션 자체에 데이터를 수신 또는 전송할 수 있다.
- 통합 가능한 리소스 중 하나 : 파일 시스템
- 파일시스템을 위한 컴포넌트 : 파일을 읽거나 쓰는 채널 어댑터 (Channel Adapter)
게이트웨이
- 파일에 데이터를 쓸 수 있도록 애플리케이션에서 통합 플로우로 데이터를 전송하는 게이트웨이
@MessagingGateway(defaultRequestChannel = "textInChannel") //메시지 게이트웨이를 선언합니다.
public interface FileWriterGateway {
void writeToFile(
@Header(FileHeaders.FILENAME) String filename,
String data);
}
- @MessagingGateway
- FileWriterGateway 인터페이스의 구현체를 runtime에 생성하라고 spring-Integretion에게 알려준다.
- 이것은 repository의 구현체를 spring-data가 자동 생성하는 것과 유사하다.
- defaultRequestChannel : 해당 인터페이스의 메서드 호출로 생성된 메시지는 이 속성에 지정된 메시지 채널로 전송된다.
- writeToFile() 의 호출로 생긴 메시지가 textInChannel이라는 이름의 채널로 전송된다.
- 메시지는 메시지 헤더와 같은 메타데이터와 실제 데이터인 페이로드로 구성됩니다.
- 여기서 filename은 메시지 헤더, data는 메시지 페이로드로 전달됩니다.
통합플로우 정의하기
- 애플리케이션의 요구를 충족하는 플로우을 정의하는 것
- 3가지 구성 방법으로 정의할 수 있다.
1) XML 구성
2) 자바 구성
3) DSL을 사용한 자바 구성
XML을 사용해 통합 플로우 정의하기
메시지 채널
- 통합 파이프라인을 통해서 메시지가 이동하는 수단. 채널은 spring integration의 다른 부분을 연결하는 통로.
- PublishSubscribeChannel
- 이것으로 전송되는 메시지는 하나 이상의 컨슈머로 전달된다. 컨슈머가 여럿일 때는 모든 컨슈머가 해당 메시지를 수신한다.
- QueueChannel
- 이것으로 전송되는 메시지는 FIFO 방식으로 컨슈머가 가져갈때까지 큐에 저장된다. 컨슈머가 여럿일때는 그 중 하나의 컨슈머만 해당 메시지를 수신한다.
- PriorityChannel
- 이것으로 전송되는 메시지는 priority헤더를 기반으로 컨슈머가 메시지를 가져간다. 컨슈머가 여럿일때는 그 중 하나의 컨슈머만 해당 메시지를 수신한다.
- RendezvousChannel
- 이것으로 전송되는 메시지는 컨슈머가 메시지를 수신할 때까지 메시지 전송자가 채널을 차단한다. (전송자와 컨슈머를 동기화한다.)
- DirectChannel
- 이것으로 전송되는 메시지는 전송자와 동일한 스레드로 실행되는 컨슈머를 호출하여 단일 컨슈머에게 메시지를 전송한다. 이 채널은 트랜잭션을 지원한다. 컨슈머가 여럿일 때는 모든 컨슈머가 해당 메시지를 수신한다.
- ExecutorChannel
- 이것으로 전송되는 메시지는 TaskExecutor를 통해서 메시지가 전송된다 (전송자와 다른 스레드에서 처리된다). 이 채널 타입은 트랜잭션을 지원하지 않는다. 컨슈머가 여럿일 때는 모든 컨슈머가 해당 메시지를 수신한다.
- FluxMessageChannel
- 이것으로 전송되는 메시지는 프로젝트 리액터의 플럭스를 기반으로 하는 리액티브 스트림즈 퍼블리셔 채널이다. (뭔소리냥)
자바 구성과 자바 DSL 구성 모두에서 입력채널은 자동으로 생성되며, 기본적으로 DirectChannel 이 사용된다. 그러나 다른 채널 구현체를 사용하고 싶다면 해당 채널을 별도의 빈으로 선언하고 통합 플로우에서 참조해야한다.
반응형
'Spring' 카테고리의 다른 글
스프링배치 1장 - 배치와 스프링 (0) | 2022.03.12 |
---|---|
스프링 배치 2 - 시작하기 (0) | 2022.03.05 |
스프링 배치 1 - 개요 및 아키텍처 (0) | 2022.03.05 |
[스프링 인 액션] 02 유효성 검증 (0) | 2021.10.11 |
[스프링 인 액션] 01 스프링 프로젝트 생성 및 구조 (0) | 2021.10.04 |