2017-03-28 80 views
0

我運行自動路由時文件的文件夾Sql超時。駱駝上下文豆未能多個文件

<route id ="automatic-route"> 
     <from uri="file:C:/pathToFolder?noop=true"/> 
     <to uri="bean:automaticBean"/> 
     <to uri="activemq:STARTFLOW.Q"/> 
</route> 

在被丟棄我移動文件在一個名爲「完成」,在我的豆AutomaticBean.java Java方法的子文件夾。

然後我開始另一條路線來處理文件。當我在文件夾中移動多個文件時,它們被正確地移動到子文件夾(通過我的Bean,我用java方法移動它們)。但是第二個bean(文件處理和SQL查詢)有timeoutException,因爲這些文件同時被移動和處理。

例如,當我移動5個文件時,其中3個正確處理,但最後一個有timeoutException。是否有可能爲每個文件逐一運行第二條路線(安排它們或類似的東西)?並且只有在正確處理前一個文件時才爲文件啓動第二個路由?

我試着用noop = false; move = done,我有無限循環問題,我無法處理這些文件,因爲它們移動了。這就是爲什麼我使用noop = true。此外我的問題是關於第二條路線(文件都正​​確移動)。

謝謝。

回答

0

實際上增加了延遲的一套maxMessagePerPoll 1的伎倆

<route id ="process-route"> 
    <from uri="file:C:/pathToFolder/noop=true&amp;delay=10000&amp;maxMessagesPerPoll=1"/> 
    <to uri="bean:processBean"/> 
</route> 
1

一個解決方案可以輪詢/done文件夾中的新文件(已經被automaticBean處理和移動)。在這種情況下,您必須使用readLockdoneFileName來檢查文件是否未被其他進程鎖定。

<route id ="process-route"> 
    <from uri="file:C:/pathToFolder/done?readLock=changed"/> 
    <to uri="bean:processBean"/> 
</route>