Camel ftp使用者在启动时忽略幂等文件存储库

时间:2014-07-09 19:03:43

标签: apache-camel

我创建了一条消耗来自ftp的路由:

private RouteDefinition ftpRouteOcs() {
    IdempotentRepository<String> fileRep = FileIdempotentRepository.fileIdempotentRepository(new File("./downLoadedOcs"), A_MILLION, TEN_MB);
    // from endpoint
    FtpEndpoint<?> ftpEndpoint = getContext().getEndpoint(config.ftpUrlOcs(), FtpEndpoint.class);
    ftpEndpoint.setIdempotentKey("${file:name}");
    ftpEndpoint.setIdempotentRepository(fileRep);
    ftpEndpoint.getConfiguration().setBinary(true);
    //important!
    ftpEndpoint.getConfiguration().setStepwise(false);
    // no write or move operations - read only, set idempotent to true
    ftpEndpoint.setNoop(true);
    // only include files that match pattern
    ftpEndpoint.setInclude(OCS_FILE_FILTER_PATTERN);
    // fetch 1000 files in one poll...
    ftpEndpoint.setMaxMessagesPerPoll(FTP_MAX_FILES_PER_POLL);
    // but sort ALL files before...
    ftpEndpoint.setEagerMaxMessagesPerPoll(false);
    // ...by file name
    ftpEndpoint.setSortBy("file:name");
    // to endpoint
    FileEndpoint fileEndpoint = getContext().getEndpoint("file:" + config.ftpTargetOcs(), FileEndpoint.class);
    // mark finished downloads
    fileEndpoint.setDoneFileName("${file:name}.done");
    // ignore if exist
    fileEndpoint.setFileExist(GenericFileExist.Ignore);
    return from(ftpEndpoint).to(fileEndpoint).routeId(RouteIds.ftpOcs.name());
}

如您所见,我正在使用fileIdempotentRepository。文件创建正常,每个下载的文件都添加到文件中 - 我得到所有相关的调试输出。问题是重启后重新下载所有文件 - 忽略存储库。该文件仍然存在,每次运行时文件都会更新 - 使用相同的数据(创建日期保持不变,更新日期更新)。 那我的设置有什么问题呢?

1 个答案:

答案 0 :(得分:0)

Claus Ibsen在邮件列表(http://camel.465427.n5.nabble.com/Camel-ftp-consumer-ignores-idempotent-file-repository-on-start-td5753615.html

上回答

解决方案只是添加

fileRep.start();

因此必须明确启动存储库。