SI +观察者模式

时间:2013-08-16 16:21:21

标签: java spring-integration

我有一个使用spring-integration的代码库。

<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的bean工作正常,我在myDataGetter bean的handleMessage()方法中获取过滤文件。

到目前为止一切顺利。 现在在myDataGetter bean中,我将根据日期进一步过滤文件,例如轮询器会给我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个文件,即data_file1,2和3的20130816版本。 所以我在handleMessage方法中构建了一个逻辑构建HashMap,它将包含这3个文件的最新版本。它完成了一个简单的迭代数据列表的逻辑,并将主题文件与它进行比较。经过几次迭代,我得到了包含最新3个文件的HashMap构建。

现在我的下一个要求是通过频道将这3个文件传递给下一个bean。

但应该从通道读取数据的bean只应在HashMap完全使用最新的3个数据文件构建时读取。 是否可以在SI中完成任何操作,以便仅在处理完所有传入数据并过滤出一组数据后才将数据放入下一个通道?

我可以考虑将myDataGetter作为obeservable,将下一个通道的bean作为观察者。但它并不适合SI中的事情。

有任何意见吗?

1 个答案:

答案 0 :(得分:1)

您可以将<aggregator/>与自定义发布策略结合使用。