2014-12-03 156 views
2

我有一個條件,我應該通過以下步驟讀取SFTP遠程位置的文件後,遠程SFTP位置移動文件:從SFTP位置Spring集成:處理

  1. 閱讀文件說input文件夾。

  2. 處理文件並使用文件的內容調用REST API。

  3. 如果調用成功將遙控SFTP文件archive 文件夾其他遠程SFTP文件移動到文件夾error

我想到了兩種方法。我不知道哪一個可能。

首先,將文件從SFTP遠程位置讀取到本地並從遠程刪除。然後調用REST API。根據REST調用的響應,成功或錯誤將文件上傳到遠程文件夾。

其次,將文件從SFTP遠程位置讀取到本地。然後調用REST API。根據REST調用的響應,成功或錯誤將文件上傳到遠程文件夾。

任何人都可以啓發我哪種方法可行和方便嗎?如果您能提及通道適配器,我將不勝感激。

到目前爲止,我可以調用REST API。

<int-sftp:inbound-channel-adapter id="sftpInbondAdapter" 
     auto-startup="true" 
     channel="receiveChannel" 
     session-factory="sftpSessionFactory" 
     local-directory="${local.dir}" 
     remote-directory="${sftp.dir.input}" 
     auto-create-local-directory="true" 
     delete-remote-files="true" 
     filename-pattern="*.txt"> 
     <int:poller fixed-rate="60000" max-messages-per-poll="1" /> 
    </int-sftp:inbound-channel-adapter> 
    <int:channel id="receiveChannel"/> 

    <int:splitter input-channel="receiveChannel" output-channel="singleFile"/> 
    <int:channel id="singleFile"/> 

    <int:service-activator input-channel="singleFile" 
     ref="sftpFileListenerImpl" method="processMessage" output-channel="costUpdate" /> 
    <int:channel id="costUpdate" /> 

    <int:header-enricher input-channel="costUpdate" output-channel="headerEnriched"> 
     <int:header name="content-type" value="application/json" /> 
    </int:header-enricher> 
    <int:channel id="headerEnriched" /> 

    <int-http:outbound-gateway 
     url="${cost.center.add.rest.api}" request-channel="headerEnriched" 
     http-method="POST" expected-response-type="java.lang.String" reply-channel="costAdded" > 
    </int-http:outbound-gateway> 
    <int:publish-subscribe-channel id="costAdded" /> 

我想移動遠程文件到另一個位置在遠程文件夾一次API調用是評估API調用響應之後的成功。我的問題是如何根據http:outbound-gateway的響應將遠程文件移動到另一個遠程位置?

+0

對不起,你的場景看起來不錯。你面臨什麼問題?刪除或不刪除遠程文件並不會讓你感興趣,因爲默認情況下'AcceptOnceFileListFilter'就是用於本地文件的。 – 2014-12-03 12:32:11

+0

實際上,我想在評估API調用響應後,將API調用成功後,將遠程文件移動到遠程文件夾中的另一個位置。我的問題是,如何根據「http:outbound-gateway」的響應將遠程文件移動到另一個遠程位置? – nebula 2014-12-03 15:04:14

+0

現在很清楚。你沒有在......之前指定具體問題嗎?Gary的答案是否適合你? – 2014-12-03 15:06:14

回答

1

查看retry-and-more sample,特別是Expression Evaluating Advice Demo - 它顯示瞭如何基於上傳成功/失敗採取不同的操作。

編輯:

在迴應阿爾喬姆的回答您的意見;既然你有delete-remote-files="true"沒有遠程文件可以移動,您必須先將其設置爲false

然後,按照我的建議使用建議來處理成功或失敗 - 使用遠程文件的ftp:outbound-gatewaymv。請參閱gateway documentation for the mv command

+0

我可以通過SFTP使用ftp:outbound-gateway嗎? – nebula 2014-12-03 15:50:15

+0

是的;有[SFTP版本](http://docs.spring.io/spring-integration/reference/html/sftp.html#sftp-outbound-gateway)。在提問之前查閱文檔通常是一個好主意。 – 2014-12-03 15:51:42

+0

謝謝。儘管我有最後一個困惑。在該通道之後,我有特定的文件直到'singleFile'通道,在其他後續通道中不會有文件消息。當遠程位置有多個文件時,如何根據「http:outbound-gateway」的響應知道從遠程文件夾移動哪個文件? – nebula 2014-12-03 16:06:17

相關問題