我正在尝试读取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有关,它只能获取单个文件并且该过程不是递归发生的?
答案 0 :(得分:2)
如果解析成功,则将它们移动到另一个目录(不是默认目录,即.done目录)
使用类似这样的例子:
.to("file://test/readFile?autoCreate=true&moveFailed=.failed/${date:now:yyyyMMdd}/${file:name}&move=.processed/${date:now:dd-MM-yyyy}/${file:name}")
来自Camel文档(FTP/SFTP/FTPS Component):
默认情况下,FTP使用者将在远程FTP服务器上保持消耗的文件不变。如果要删除文件或将其移动到其他位置,则必须明确配置它。例如,您可以使用delete = true删除文件,或使用move = .done将文件移动到隐藏的完成子目录中。 常规的File使用者是不同的,因为它默认将文件移动到.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:.."));
}
});
干杯!