adSense 900*70


Spring integration JAVA - Tutorial번역

Spring integration

Reference

  • 메세지 기반의 Architectures를 지원한다.
  • 메세지 routing 및 transformation을 지원한다.
  • EIP를 지원한다.

다음과 같은 목표를 지향한다.

  • 복잡한 enterprise 통합 솔루션을 구현하기 위한 간단한 모델
  • Spring 기반의 Application내에서의 메세지 기반의 비동적 행위 구현을 수월하게 한다.
  • 기존 Spring 사용자들을 위한 직관적이고 점진적인 적용.

다음과 같은 원칙을 가진다.

  • 각 Component들은 모듈성과 테스트 용이성을 위해 약한 의존성(Loosely coupled)을 가져야 한다.
  • 비지니스 로직과 통합 로직간 관심사의 분리(separation of concerns)을 강제해야 한다.
  • 확장이 필요한 곳은 되도록 추상화를 해야 하며, 이때 이식성과 재사용성에 초점을 맞추어 설계되어야 한다.

Main Components

Spring 기반의 application은 수직적 관점에서의 계층적 구조와 계층간 interface 기반의 접점 통신 구조를 가진다. 이는 계층간 의존성을 줄이기 위한 것이다. 이 기반에 Message-driven 구조는 수평적 관점을 더하며, Pipes-and-Filters모델로 추상화 할 수 있다.


  • Filter: Message를 생산 혹은 소비하는 객체.
  • Pipe: Filter사이에서 Message를 전달하는 통로 역활을 수행하는 객체.

Message

Message


  1. 모든 타입의 Java객체를 포함할 수 있고, 거기에 더해서 framework이 해당 객체를 다루기 위한 metadata를 포함한다.
  2. 아래와 같은 구성요소가 있다.

    • Headers:

      * key-value 형태의 구조
      * 파일 전달 시 파일명 혹은 메일 사용시 수신자, 발신자, 참조, 제목등과 같은 공통 정보를 포함한다.
      * 전달 매체간 특정 값을 전달하는 용도로도 사용.
    • Payload: 모든 타입의 객체를 포함할 수 있다.

Message Channel

Message Channel

역활 및 특징


  1. Pipes-and-Filters에서 pipe역활을 수행한다.
  2. 생산자(Producer)는 Message를 channel로 전송
  3. 소비자는(Consumer)는 channel로부터 Message를 수신
  4. Messaging component간 의존성을 약하게 만드는 역활을 하는 객체.
  5. P2P(Point to Point) 혹은 Pub-sub(publish/subscribe)구조로 구성할 수 있음.
  6. Pollable Channels은 Queue내에 message를 buffering할 수 있다.

Message Endpoint

역활 및 특징


  1. Pipes-and-Filters에서 filter역활을 수행한다.
  2. 비지니스 로직을 담당하는 application 코드와 messaging framework간의 연결(connect)을 책임진다.. (* 단 application 코드를 침해하진 않는다.)
  3. 비지니스 로직을 담당하는 application 객체는 Message, Message channel의 존재를 알 필요가 없다.
  4. Message channel과 mapping 된다.

Transformer

역활 및 특징


  • Message의 내용(주로 payload) 혹은 구조의 변환과 변환된 Message를 반환하는 책임을 지고 있다.
  • Message의 header내용을 추가/삭제 혹은 변경 할 수 있다.

Filter

역활 및 특징


  • 특정 Message를 다른 channel로 통과 시킬지를 결정한다.
  • Payload의 내용 혹은 header의 존재 여부를 검사하여 boolean값을 반환.
  • true를 반환하면, 다른 channel로 보내지고, false이면 drop된다. (* Message를 drop 시키지 않고 다르게 처리하도록 구현 할 수 있다.)

Router

역활 및 특징


  • Message의 내용 혹은 Message Header내의 metadata에 따라 Message를 특정 channel로 분배 시키는 역활을 수행한다.
  • 다수의 subscriber(channel)로 메세지를 전달할 수 있다.
    Router

Splitter

역활 및 특징


  • 이름처럼 복합적인 내용을 담은 Message의 payload를 분할하여 서로 다른 channel로 전송한다.

Aggregator

역활 및 특징


  • Splitter와는 반대의 객체. 즉, 여러 Message를 수신하여 하나의 Message로 결합 시킨다.
  • Pipeline내에서 주로 마지막에 위치한다.
  • Spring Integration은 아래와 같은 두개의 수집 전략 객체를 제공한다.

    • CorrelationStrategy: 다른 Message가 어떻게 연관관계를 가지는지 결정할 수 있는 객체. 특정 Message와 연관된 Key를 반환.
    • ReleaseStrategy : 언제 Message의 그룹이 완성되는지를 결정하는 객체.

Service Activator

역활 및 특징


  • Service instance와 messaging system을 연결시켜주는 객체.
  • Input Message Channel은 반드시 구성되어야 하지만, output Message channel은 service method의 반환여부에 따라 선택적으로 구성할 수 있다.
    Service Activator
위의 diagram에서 실선은 pollable, 점선은 subscribe이다.

Channel Adapter

역활 및 특징


  • 특정 Message Channel을 다른 system 혹은 다른 전송 매체로 연결시켜주는 endpoint
  • In/outbound에 대한 처리 가능
  • 처리 가능한 전송 System의 예

    • JMS
    • FILE
    • HTTP
    • Web Service
    • Mail

An inbound "Channel Adapter" endpoint connects a source system to a MessageChannel.

위의 diagram에서 실선은 pollable, 점선은 message-driven 이다.

An outbound "Channel Adapter" endpoint connects a MessageChannel to a target system.

위의 diagram에서 실선은 pollable, 점선은 subscribe이다.

Inbound-channel-adapter


  • Converting in-comming message to Message and return to MessageChannel
  • Configure subscription with poller
  • Examples of Configuration in XML
<inbound-channel-adapter ref="source1" method="method1" channel="channel1">
<poller fixed-rate="5000"/>
</inbound-channel-adapter>

<inbound-channel-adapter ref="source2" method="method2" channel="channel2">
<poller cron="30 * 9-17 * * MON-FRI"/>
</channel-adapter>

Outbound-channel-adapter


  • Has message that consuming Message
  • Connected to MessageChannel
  • Examples of Configuration in XML
<outbound-channel-adapter channel="channel1" ref="target1" method="method1"/>
<outbound-channel-adapter channel="channel2" ref="target2" method="method2">
<poller fixed-rate="3000"/>

</outbound-channel-adapter>
<beans:bean id="target1" class="org.bar.Foo"/>
<outbound-channel-adapter channel="channel2" method="method2">
<beans:bean class="org.bar.Foo"/>

</outbound-channel-adapter>

Configuration and @EnableIntegration

Configuration은 XML과 Annotation으로 가능하다. 단, Spring 4.0이상의 경우에만 @EnableIntegration을 사용가능하다.

@EnableIntegration을 사용하려면, Spring 4.0이상, Annotation Configuration이 사용가능해야 한다.

@EnableIntegration


  • @EnableIntegration는 상위 context에서 공통으로 사용되는 component들을 한번만 선언하는 것을 가능하게 해준다.
  • 다음과 같은 Integration의 기반이 되는 component들을 application context에 등록해준다.

    • errorChannelerrorChannelLogginHandler, poller를 위한 taskScheduler, jsonPath등과 같은 내장된 bean들
    • 여러 BeanFactoryPostProcessor ( *BeanFactory의 기능 향상을 위함.)
    • 여러 BeanPostProcessor (* 여러 bean들을 통합 목적으로 사용하기 위함.)
    • Annotation processor (* Messaging Annotation들을 parsing하고 application context에 등록하기 위함.)

@IntegrationComponentScan


  • @ComponentScan과 유사한 기능을 수행 (classpath scanning등, 하지만 Spring integration을 위한 component, annotation들로 제한됨.)

@EnablePublisher

다음의 bean들을 등록하기 위한 생겨난 annotation.


  • channel속성 없이 @Publisher를 사용할수 있게 하는 default-publisher-channel
  • PublisherAnnotationBeanPostProcessor

하나 이상의 @EnablePublisher 사용 시, 모든 @EnablePublisher은 같은 default channel을 위한 값을 가져야 함.

@GlobalChannelInterceptor


  • 전역적인 channel interception을 위한 ChannelInterceptor를 표시하기 위해 생긴 annotation
  • <int:channel-interceptor>xml과 동일한 의미를 가지고 있다.
  • @Component와 함께 class에 선언할 수 있고
  • @Configuration class의 @Bean메서드에 선언할 수 있다.

@IntegrationConverter

다음의 bean들을 표시하기 위해 생긴 annotation


  • Converter
  • GenericConverter
  • integrationConversionService의 대체 bean인 ConverterFactory
  • <int:converter>xml과 동일한 의미.
  • @Component와 함께 class에 선언할 수 있고
  • @Configuration class의 @Bean메서드에 선언할 수 있다.

덧글

댓글 입력 영역


side adsense

adSense 900*70