我最近開始使用Camel將某些文件ftp到遠程服務器。有相當多的數據需要傳輸(〜5 GB)。爲了快速傳遞這些數據,我設置了Camel來處理幾個線程。 我的配置類看起來如下:駱駝拉鍊輸入Apache Camel無法在xxx毫秒內獲取鎖定。將跳過文件
@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.input=file\\:/Temp/
camel.zip.output=ftp://host:21?username=xxx&password=yyy&binary=true
當運行我的代碼,所有的文件傳輸。但是,我反覆不斷地在多個文件上得到一個readLock超時(我說約需要處理的文件的10%,拋出這個超時)。我假設一些線程試圖鎖定已被另一個線程處理的文件,因此該文件的readLock超時。但是,對於線程應用程序來說,這似乎不太合適。有沒有辦法解決這個問題?
Thnx提前
我之前沒有使用'apache-camel',但是可能會在兩者之間使用某種阻塞隊列,以便線程可以使隊列中的文件名排列。這將確保一個線程只能處理一個文件。 – CKing
這可能是這個問題的一個可能的解決方案。我們選擇了駱駝,因爲它非常靈活,有很多配置選項,並且非常易於使用。 我對自己的排隊並不熟悉,但如果項目仍處於啓動階段,我肯定會考慮它。 –