Mule Quartz轮询FTP端点

时间:2013-08-21 15:36:08

标签: ftp quartz-scheduler mule

我使用石英轮询器来轮询FTP端点,但我的问题是当轮询器运行时它不会从给定的路径或目录中拾取多于1个文件,它只会选择一个文件。我们怎样才能获取轮询器启动时出现的每个文件。 ?

感谢您的期待。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并使用2个独立的流程解决了它。另外一个自定义接收器用于避免删除远程文件,一个java组件用于通知作业完成,请参阅下面的流程:

<ftp:connector name="ftp-connector" passive="true" streaming="true" binary="true">
    <service-overrides messageReceiver="app.NonDeletingFtpMessageReceiver" />
</ftp:connector>

<ftp:endpoint name="ftp-fetch" connector-ref="ftp-connector"
    host="${pr.ftp.host}" port="${pr.ftp.port}" path="${pr.ftp.remotePath}"
    user="${pr.ftp.user}" password="${pr.ftp.password}">
    <file:filename-wildcard-filter pattern="${pr.ftp.filePattern}" />
</ftp:endpoint>

<quartz:endpoint name="quartz-batch" jobName="cron-job"
    cronExpression="${pr.ftp.cron}" responseTimeout="${pr.ftp.timeout}">
    <quartz:event-generator-job />
</quartz:endpoint>


<flow name="ftp-scheduler-flow" doc:name="ftp-scheduler-flow">
    <inbound-endpoint ref="quartz-batch" />
    <echo-component />
    <flow-ref name="ftp-process-fetch-flow" />
    <component class="app.FTPFetchHandler" />
</flow>

<flow name="ftp-process-fetch-flow">
    <inbound-endpoint ref="ftp-fetch" />
    <expression-filter evaluator="header"
        expression="originalFilename!=null" />
    <file:outbound-endpoint path="${pr.ftp.localPath}"
        responseTimeout="${pr.ftp.timeout}" outputPattern="#[header:originalFilename]" />
</flow>

答案 1 :(得分:0)

石英轮询端点消息源用于在每次触发时处理单个mule事件,因此设计它只会消耗一个文件。

报告为bug,但查看代码可能会被归类为增强请求。

要获得不同的行为,您应该编写自己的自定义组件,并使用它来从ftp中检索所有文件,或者依赖ftp传输本身。

HTH