2014-03-06 3 views
2

spring-xd가 스트림의 프로세서를 어떻게 처리하는지 궁금합니다. 내가 정말로 알고 싶은 것은 프로세서가 코드를 차단하는지 아니면 프로세서 (reactor) (https://github.com/reactor/reactor/wiki/Processor)가 프로세서를 다루는 지에 관한 것입니다.스트림 | 프로세서 및 스레드 모델

값 비싼 블로킹 작업 (일명 외부 시스템 호출)을 실행해야하는 경우 가장 좋은 방법은 무엇입니까? 원자로 나 다른 반응 프레임 워크를 사용하고 싶지만 XD 파이프 라인 아키텍처 내에서 그렇게하는 방법은 무엇입니까? 그것은 기본적 출력라는 채널이라는 채널 입력에서 봄 통합 메시지 흐름이다 -

안부

답변

2

용어 스프링 XD 스트림 프로세서 특정한 의미를 갖는다. 관례에 따라 이러한 채널은 XD 스트림에서 페이로드를 생성하고 소비합니다. 예를 들어, mystreamsomeSource | someProcessor | someSink으로 정의 된 경우 프로세서 모듈은 값 비싼 작업을 비동기식으로 실행할 수 있지만 스트림은 여전히 ​​프로세서 처리량이 표시되지 않도록 프로세서의 출력 채널에서 메시지를 기다려야합니다.

그러나 비동기 적으로 실행되도록 싱크를 구현하면 도움이되는 경우가 있습니다. 이 경우 메시지가 싱크의 입력 채널에 도착하면 스트림이 차단되지 않습니다.

mystream = someSource | ... | someSink 
mytap = tap:stream:mystream > asyncSink 

또는 명명 된 큐 (또는 주제) : (종류의 그것에 반지를 가지고) 비동기 싱크는 스트림에 탭에 부착 할 수

mystream = someSource | ... | > queue:myQueue 
queue:myQueue > asyncSink 

또는이 될 수있다 기본 스트림 싱크.

비동기 싱크를 구현하려면 싱크 모듈 내의 폴러 및 태스크 실행기를 사용하여 Spring Integration 엔드 포인트 (예 : ServiceActivator)가 외부 서비스를 호출하도록 구성해야합니다. 엔드 포인트는 Pollable 채널을 폴링합니다 (예 : 입력 채널 자체가 대기열 채널로 선언 될 수 있음). 자세한 내용은 http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html을 참조하십시오.