2012-04-23 63 views
1

我的Mule ESB服務器上有一個文件夾,有幾個源可以指向(一個SCP,一個SFTP以及其他)。 每當我檢測到一個文件,我想將它移動到另一個目錄。問題是,我正在移動部分完成的文件,導致我丟失數據。Mule ESB:如何檢測部分文件以避免傳輸部分上傳的文件?

我試過使用文件的「文件」屬性,但它似乎不能可靠地工作。我試圖儘可能保持延遲,因爲大多數文件將是< 10kb,但有些需要大到100mb。

有沒有什麼辦法可以知道一個文件是不是一個部分,而不是一個完整的?我知道WinSCP使用.filepart擴展名,但這只是針對一個應用程序,甚至可以在WinSCP的首選項中更改(或完全刪除)該擴展名。

+0

您使用fileAge獲得了哪些可靠性問題?如果它是一個錯誤,也許值得打開一個JIRA @ MuleSoft?這就是說,保持延遲低和可靠性高的最佳選擇是強制使用控制文件(如.filepart)並創建一個特定的過濾器來查找它。 – 2012-04-24 00:12:39

+2

實際上,多進行一次測試,結果發現問題出在操作系統級別。在RedHat上,「上次修改時間」時間戳每更新約1000毫秒,爲4kb文件創建過大的延遲時間。在Windows上更糟糕:「最後修改」僅在傳輸開始時設置,然後在完成時重置。 MuleSoft團隊從技術上講是正確的,可以從這個時間戳中獲取fileAge,但操作系統並沒有經常更新它的工作。他們應該使用文件**大小**。我會提交一份變通票。 – Bing 2012-04-24 12:59:27

+0

這是很棒的發現。 – 2012-04-24 14:57:44

回答

2

我解決了我自己的問題。

隨着更多的測試,事實證明問題是在操作系統級別。在RedHat上,「上次修改時間」時間戳每更新約1000毫秒,爲4kb文件創建過大的延遲時間。在Windows上更糟糕:「最後修改」僅在傳輸開始時設置,然後在完成時重置。 MuleSoft團隊從技術上講是正確的,可以從這個時間戳中獲取fileAge,但操作系統並沒有經常更新它的工作。他們應該使用文件大小來代替。我會提交一份變通票。

+0

我發現了同樣的問題。你能發佈你的解決方法嗎? – 2012-05-30 14:29:10

+0

嗨費爾南多,對於遲到的回覆抱歉,只看到了你的評論。 我正在使用自定義轉換器來檢查文件大小,而不是上次修改時間。 (檢查大小 - >睡眠X毫秒 - >再次檢查大小:如果大小相同,則假設完成。)祝你好運! – Bing 2012-08-29 21:28:25