2013-12-10 32 views
0

使用Mule 3.2.1,我們遇到了一個奇怪的問題,我們使用SFTP組件從服務器獲取pgp加密報告文件。我們使用SFTP組件對文件進行歸檔,然後使用file:endpoint生成工作副本以供進一步處理。Mule SFTP to File流偶爾會產生一個損壞的pgp文件

我們的問題是,每過一段時間,文件的工作副本就會損壞,但SFTP存檔文件是好的。在十六進制編輯器中查看損壞的文件時,我們看到好的字節,然後突然間,我們看到文件其餘部分的空字節。當Mule正在複製時,它看起來像是底層文件被刪除了。

另一個令人困惑的信息是,我們試圖再次下載失敗的文件,並且一切正常。這使我相信這不是文件中的問題,但顯然我們確實有一個文件一直似乎失敗。所有這些東西都發生在我無法訪問的文件的生產服務器上。如果不知道Mule的內部運作情況,我不知道什麼樣的條件可能會造成這個問題。

有沒有什麼聰明的人在那裏熟悉Mule的內部運作以冒險猜測?

此外,我們不是騾子的專家,並會歡迎任何批評我們的騾子配置。 (順便說一句,下面的配置是一個什麼樣的生產和民意調查更頻繁地修改後的版本,等等)

<sftp:connector name="SftpConnector" validateConnections="true" autoDelete="true"> 
    <file:expression-filename-parser /> 
</sftp:connector> 

<file:connector name="FileConnector" pollingFrequency="1000" fileAge="1000" streaming="false" 
    autoDelete="false"> 
    <service-overrides messageFactory="org.mule.transport.file.FileMuleMessageFactory" /> 
    <file:expression-filename-parser /> 
</file:connector> 

<sftp:endpoint name="SftpEndpoint" connector-ref="SftpConnector" host="localhost" 
    port="22" user="tdr" password="password" path="/opt/tdr/outbound" archiveDir="/home/cps/mule/sftp-archive" 
    responseTimeout="30000" sizeCheckWaitTime="2500" disableTransportTransformer="true"> 
    <file:filename-wildcard-filter pattern="*.pgp,*.gpg" /> 
</sftp:endpoint> 

<file:endpoint name="FileEndpoint" connector-ref="FileConnector" path="/home/cps/mule/input" /> 

<flow name="DfrFileGrabber"> 
    <quartz:inbound-endpoint jobName="ptDfrGrabber" cronExpression="0/2 * * * * ?"> 
     <quartz:endpoint-polling-job> 
      <quartz:job-endpoint ref="SftpEndpoint" /> 
     </quartz:endpoint-polling-job> 
    </quartz:inbound-endpoint> 

    <file:outbound-endpoint ref="FileEndpoint" outputPattern="#[header:originalFilename]" /> 
</flow> 

回答

1

我認爲我們得到了這一個底部。我不能保證我的測試案例能夠重現我們在製作過程中遇到的問題,但我相信問題的根源在於,如果要複製的文件足夠大,則可能在先前之前啓動石英計時器sftp複製已完成,導致使用相同文件名進行多個副本。

一種解決方案是在SFTP連接中包含tempDir屬性。這會導致SFTP連接將正在檢索的文件移動到服務器上的tempDir目錄中,同時發生副本。因此,如果石英計時器在第一次複製完成之前觸發,則它找不到相同的文件。