2013-02-12 62 views
1

我使用Spring集成的文件和ftp功能來實現它認爲所有文件 寫入加密的目錄,然後ftp'ed到目標目錄中的流動。消息的有效負載是文件Spring集成 - 文件消息流

File Inbound Poller -> Custom Encryption -> Outbound FTP -> Handle Original File 

'自定義加密'服務需要一個文件名,然後返回加密文件的名稱。出站FTP服務工作,並在傳輸成功或失敗時,加密文件名稱將被移至特定文件夾。

新的要求是我需要移動原來的文件名,而不是加密的。我不確定什麼是正確的方式來實現這個或我有什麼選擇?

File Inbound Poller -> Custom Encryption -> Outbound FTP 
        |        | 
        >        >  -> Handle Original File 

我已經使用分離器/聚合器圖案,以生成出站的ftp階段之後被重新aggreated的第二消息考慮的第一個想法但這似乎不正確,因爲分離器部未產生兩個不同的消息,而複製原件。

回答

3

有許多方法可以做到這一點,包括...

  1. 使第一通道<publish-subscribe-channel/>訂閱與order="1"的加密和處理order="2"。只有在其他流程正常完成後纔會調用處理程序。

  2. 在加密服務之前添加<header-enricher/>,將原始文件複製到標頭<header name="orig" expression="payload"/>,然後使用下游代碼中的標頭。

第一個就像你的「分離器」評論 - 有效地允許2個流處理相同的消息。

+0

謝謝。我曾想過按照選項2使用標題,但覺得這可能會有點作弊,因爲我不想爲標題添加一個名稱/值的負載。就選項1而言,爲了返回ftp操作的值,我會再次設置標題值? – emeraldjava 2013-02-12 14:29:54

+0

最後一個問題 - 對於'request-handler-advice-chain'是否有可能在鏈中同時擁有RequestHandlerRetryAdvice和ExpressionEvaluatingRequestHandlerAdvice bean? – emeraldjava 2013-02-12 14:33:37

+1

不確定你的意思是「FTP結果」;如果成功,線程將正常返回,如果拋出異常,它將不會調用第二個訂閱者(默認情況下 - 它可以被忽略失敗覆蓋)。關於頭文件 - 這是一種常見的方法 - 例如,做同樣的事情。實際上,我們甚至提供了一個常量(FileHeaders.ORIGINAL_FILE)。 – 2013-02-12 16:14:19