2013-08-16 2 views
1

저는 스프링 통합을 사용하는 코드베이스를 가지고 있습니다.SI + 옵저버 패턴

<integration-ftp:inbound-channel-adapter id="ftpInbound" 
           channel="ftpChannel" 
           session-factory="ftpClientFactory" 
           filter="myCustomFilter"                        
           auto-create-local-directory="true" 
           delete-remote-files="false"                  
           remote-directory="/foo/bar"                  
           local-directory="file:output"> 
    <integration:poller fixed-rate="5000" max-messages-per-poll="-1"/> 
</integration-ftp:inbound-channel-adapter> 



<integration:channel id="ftpChannel"> 
     <integration:queue /> 
</integration:channel> 

<integration:service-activator id="mySA" method="handleMessage" input-channel="ftpChannel" output-channel="outputChannel" ref="myDataGetter"> 
    <integration:poller fixed-rate="1000" max-messages-per-poll="-1"/> 
</integration:service-activator> 

myCustomFilter의 콩은 잘 작동하고 나는() handleMessage에 myDataGetter 빈의 방법을 파일을 필터링 얻고있다.

지금까지 그렇게 좋았습니다. 이제 myDataGetter 빈에서 날짜를 기준으로 파일을 필터링하고 있습니다. 폴러는 나에게 9 개의 파일을 가져다 줄 것이다. 그러나 사실 그들은 3 개의 날짜에 대해서만 3 개의 버전이다.

data_file1.20130816 
data_file1.20130815 
data_file1.20130814 
data_file2.20130816 
data_file2.20130815 
data_file2.20130814 
data_file3.20130816 
data_file3.20130815 
data_file3.20130814 

지금 내 목표는 최신 3 개 파일 20130816 data_file1,2에 대한 버전과 즉 얻을 수 있습니다 3. 그래서 논리를 가지고이 3 개 파일의 최신 버전을 포함하는 것의 HashMap를 구성 handleMessage 방법에 구축 . 그것은 데이터 목록을 반복하는 순진한 논리로 끝내고 주제의 파일을 파일과 비교합니다. 몇 번 반복 한 후에는 최신 3 개의 파일을 포함하는 HashMap 빌드를 얻습니다.

이제 내 다음 요구 사항은이 3 개의 파일을 채널을 통해 다음 빈에 전달하는 것입니다.

그러나 채널에서 데이터를 읽어야하는 bean은 HashMap이 최신 3 개의 데이터 파일로 완전히 빌드 된 경우에만 읽어야합니다. SI에서 수행 할 수있는 모든 작업이있어서 모든 들어오는 데이터를 처리 한 후 다음 채널로 데이터를 필터링 한 후 다음 채널에 데이터가 저장됩니까?

myDataGetter를 obeservable로, 다음 채널을 bean으로 옵저버로 생각할 수 있습니다. 그러나 그것은 SI에서 이루어지는 방식에 적합하지 않습니다.

의견이 있으십니까?

답변

1

사용자 지정 릴리스 전략을 사용하여 <aggregator/>을 사용할 수 있습니다.