2

我正在尝试读取 ftp 目录中的所有文本文件,并对其进行解析。如果解析成功,则将它们移动到不同的目录(不是默认目录,即 .done 目录),如果解析失败,则文件应保留在 ftp 目录中。这个概念看起来很简单,但是我的路由只从 ftp 读取一个文件,并且路由在获取一个文件后自行结束。

以下是代码:

@Override
    public void configure() throws Exception {

         from(EndPointConstants.DIRECT + GetDriverProductInfo.class.getSimpleName())  
        .pollEnrich(ftp://ingestion_user@10.207.6.42/fantics?password=******&recursive=true)
        .to("file://test/readFile")

是否与 pollEnrich 相关,它只能获取单个文件并且该过程不会递归地发生?

4

1 回答 1

3

如果解析成功,则将它们移动到不同的目录(不是默认目录,即 .done 目录)

使用类似这个例子的东西:

.to("file://test/readFile?autoCreate=true&moveFailed=.failed/${date:now:yyyyMMdd}/${file:name}&move=.processed/${date:now:dd-MM-yyyy}/${file:name}")

从骆驼文档(FTP/SFTP/FTPS 组件):

默认情况下,FTP 使用者将在远程 FTP 服务器上保留已使用的文件不变。如果您希望它删除文件或将它们移动到另一个位置,则必须明确配置它。例如,您可以使用 delete=true 删除文件,或使用 move=.done 将文件移动到隐藏的 done 子目录中。常规文件使用者不同,因为它默认将文件移动到 .camel 子目录。Camel 默认不为 FTP 使用者执行此操作的原因是,默认情况下它可能缺少移动或删除文件的权限。

所以你可以使用例如:

&noop=false

&move

&delete=false

编辑:

我认为你应该想出这样的东西(下面的代码),因为 pollEnrich() 不适合这种情况。

(强烈建议不要使用以下代码,而不是使用示例)

from("direct:scan")
    .process(new Processor()
    {
        public void process(Exchange exchange) throws Exception
        {
            ConsumerTemplate consumerTemplate = exchange.getContext().createConsumerTemplate();
            ProducerTemplate producerTemplate = exchange.getContext().createProducerTemplate();
            producerTemplate.setDefaultEndpointUri("file:..");
            producerTemplate.send(consumerTemplate.receive("ftp:.."));
        }
    });

干杯!

于 2012-09-24T07:06:08.040 回答