1

我有一个弹簧集成 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. 为什么由于下载了 2 个文件,handleMessage 方法没有被调用 2 次?
  2. 为什么需要服务激活器?(没有它,我运行程序时出错)
4

1 回答 1

0

打开调试日志并查看日志。请注意,如果已处理同名文件,则不会再次对其进行处理——即使再次下载也是如此。3.0 引入了一个允许更改此行为的本地过滤器。

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

要删除该文件,您可以ExpressionEvaluatingRequestHandlerAdvice向消费端点添加一个(例如,您的. 有关如何使用建议的示例,<service-activator/>请参阅retry-and-more 示例,以及参考文档

于 2013-08-13T17:04:56.067 回答