Apache Camel ftp使用者一次又一次加载相同的文件

| 我有以下弹簧配置
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<beans xmlns=\"http://www.springframework.org/schema/beans\"
       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
       xsi:schemaLocation=\"
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://camel.apache.org/schema/spring 
       http://camel.apache.org/schema/spring/camel-spring.xsd\">

    <bean id=\"downloadLogger\" class=\"com.thomsonreuters.oa.sdi.camel.DownloadLogger\" />

    <bean id=\"fileFilter\" class=\"com.thomsonreuters.oa.sdi.camel.IgnoreReadyFilesFilter\" />

    <camelContext xmlns=\"http://camel.apache.org/schema/spring\">
        <route>
            <from uri=\"ftp://url_to_ftp?password=*******&amp;noop=true&amp;stepwise=false&amp;binary=true&amp;consumer.delay=10s&amp;recursive=true&amp;filter=#fileFilter\" />
            <process ref=\"downloadLogger\" />
            <to uri=\"file:data/outbox\" />
        </route>
    </camelContext>

</beans>
在ftp端,我有3个文件夹,其中包含要下载的文件。我想实现以下方案: 在ftp上,在第一个数据提取用户处,固定数量的文件(对于第5项)是使用者将这些文件加载​​到目标文件夹 在第二次尝试加载文件时,ftp状态仍然相同(5个文件),而骆驼ftp使用者只是不执行任何操作(检查新文件除外) 到ftp到达新的2个文件,并且在此数据提取用户仅下载这两个新文件 当前我当前的解决方案每次运行数据加载过程时都会下载所有文件,如何管理有关已下载文件的信息以防止重复文件的下载(我的意思是已经从ftp复制的文件),我可以编写自己的过滤器进行过滤已经下载了文件,但是我相信应该有内置功能可以使我对此进行控制(也许是idempotentRepository,实际上我不确定)...
已邀请:
如果希望Camel能够记住两次重启之间以前下载过的文件,则需要使用永久幂等存储库。 您需要在ftp端点上设置此选项:idempotentRepository 在此处查看更多详细信息:http://camel.apache.org/file2 (注意:FTP组件从文件组件继承选项。) Wiki页面上有一些使用不同商店的示例。您还可以建立自定义商店。
最后,我得到以下解决方案:
public class SdiRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from(\"ftp://login@url_to_ftp/RootFolder?\" +
                \"password=******&noop=true&stepwise=false&binary=true&consumer.delay=10s&recursive=true&filter=#fileFilter\")
                .idempotentConsumer(header(\"CamelFileName\"), FileIdempotentRepository.fileIdempotentRepository(new File(\"data\", \"repo.dat\")))
                .process(new DownloadLogger())
                .to(\"file:data/outbox\");
    }
}
也许@endryha答案在2011年效果很好,但不适用于Camel 2.20.1 在Camel 2.20.1中,这些代码将创建两个idempotentRepository ftp默认内存idempotentRepository idempotentConsumer自定义idempotentRepository(在这种情况下基于文件) 因此,使用idempotentRepository的正确方法是(为了便于阅读,我删除了大多数参数)
\"ftp://login@url_to_ftp/RootFolder?&idempotent=true&idempotentRepository=#myIdempotentRepo\"
和一个豆
@Bean
private IdempotentRepository<String> myIdempotentRepo() {
    return FileIdempotentRepository.fileIdempotentRepository(new File(\"data\", \"repo.dat\");
}

要回复问题请先登录注册