int-ftp:inbound-channel-adapter链接到其他通道

时间:2013-08-13 16:01:53

标签: spring-integration

我有一个弹簧集成FTP适配器,如下所示

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

自定义过滤器的定义方式是我通过FTP获取2个文件到我的本地目录。

现在我需要将所有下载的文件发送到下一个组件的频道。

我在下面尝试过:

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

<bean id="myFeeder" class="com.cs.imf2.feeder.polar.MyFeeder"/>

运行代码时,程序正确下载2个文件,但myFeeder的handleMessage只被调用1次,2个下载文件中的1个作为参数传递。

  1. 为什么handleMessage方法没有被调用2次 是2个文件下载?
  2. 为什么需要 服务激活? (没有它,我得到错误运行程序)

1 个答案:

答案 0 :(得分:0)

打开调试日志记录并查看日志。请注意,如果已处理具有相同名称的文件,则不会再次处理该文件 - 即使它已再次下载。 3.0引入了一个局部过滤器,允许更改此行为。

适配器具有本地目录的AcceptOnceFileListFilter。使用3.0(目前在里程碑2),您将能够使用AcceptAllFileListFilter覆盖此过滤器。这在3.0之前不可用。其他用户通过分离这两个函数(在ftp适配器上使用nullChannel)解决了这个限制,并使用一个单独的来监视本地目录。您可以控制文件适配器上的过滤器。

要删除该文件,您可以向使用端点添加ExpressionEvaluatingRequestHandlerAdvice(例如<service-activator/>。有关如何使用建议的示例,请参阅retry-and-more Sample,以及{ {3}}