티스토리 뷰

반응형

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 이 사용된다. 그러나 다른 채널 구현체를 사용하고 싶다면 해당 채널을 별도의 빈으로 선언하고 통합 플로우에서 참조해야한다. 

 

 

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함