저는 스프링 통합을 사용하는 코드베이스를 가지고 있습니다.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에서 이루어지는 방식에 적합하지 않습니다.
의견이 있으십니까?