我最近开始使用Camel将某些文件ftp到远程服务器。需要传输大量数据(~5 GB)。为了快速传递这些数据,我设置了Camel来处理几个线程。 我的配置类如下所示:
@Component
public class FTPCamelRoute extends SpringRouteBuilder {
@Value("${camel.zip.input}")
private String inputDirectory;
public void configure() {
from(inputDirectory + "?recursive=true&readLock=changed&readLockTimeout=3000&readLockCheckInterval=500&readLockMinAge=30s")
.onException(Exception.class).maximumRedeliveries(3).retryAttemptedLogLevel(LoggingLevel.WARN).continued(true).end()
.threads(10)
.log("Uploading file ${file:name}")
.to("{{camel.zip.output}}")
.log("Uploaded file ${file:name} complete.");
}
}
camel zip输入和输出文件夹的定义如下:
camel.zip.input=file\\:/Temp/
camel.zip.output=ftp://host:21?username=xxx&password=yyy&binary=true
运行我的代码时,所有文件将被传输。但是,我一再对多个文件进行readLock超时(我说约有10%需要处理的文件,抛出此超时)。我假设某些线程试图锁定另一个线程已经处理的文件,因此该文件上的readLock超时。但是,对于线程应用程序来说,这似乎不太合适。有办法解决这个问题吗?
Thnx提前
答案 0 :(得分:0)
你不应该自己生成线程。除非另有说明,否则Camel将读取你的目录中的所有文件,并在每个单独的线程中处理它们。您的读锁定可能是由于部分或全部其他线程试图访问已被第一个线程锁定的文件。