2013-07-31 28 views
1

我正在使用spring集成來下載文件並對其進行處理。如何在使用入站通道適配器時指定輸出通道或執行順序

<int-sftp:inbound-channel-adapter channel="FileDownloadChannel" 
         session-factory="SftpSessionFactory" 
         remote-directory="/home/sshaji/from_disney/files" 
         filter = "modifiedFileListFilter" 
         local-directory="/home/sshaji/to_disney/downloads" 
         auto-create-local-directory="true" >      
     <integration:poller cron="*/10 * * * * *" default="true"/> 
</int-sftp:inbound-channel-adapter> 

<integration:transformer input-channel="FileDownloadChannel" 
          ref="ErrorTransformer" 
          output-channel="EndChannel"/> 

執行由輪詢器啓動。 它調用「FileDownloadChannel」,然後嘗試從sftp服務器下載文件。 我想爲此入站通道適配器指定一個輸出通道,但它沒有任何輸出通道屬性。

所以我給變壓器命名的方式與入站通道適配器的命名方式相同,這樣一旦輪詢器啓動,它也會被調用。

我的問題是變壓器在下載發生之前被調用,因此變壓器不會得到任何輸入來處理並導致錯誤。

有沒有什麼辦法可以指定「order」屬性這兩個任務。或者是否有針對入站通道適配器的輸出通道的解決方法?

我真的很感謝這方面的幫助。

+0

@GaryRussell你能爲此提出一些建議嗎? –

回答

0

您需要閱讀Spring Integration Reference Manual並通過一些sample applications工作。

通道適配器沒有輸入和輸出通道,它們有channel s。通道適配器在其channel上生成或使用消息(入站VS出站)。接收消息併產生答覆的元素,例如變換器,服務激活器等,具有輸入和輸出通道。

「我的問題是變壓器在下載發生之前被調用,因此變壓器不會得到任何輸入來處理並導致錯誤。」

這個說法對我沒有意義;如果還沒有文件,沒有什麼可以「通話」變壓器。

「這兩項任務的屬性」。

沒有兩個「任務」。

輪詢器線程調用入站適配器;那麼當文件到達時,它會作爲消息發送到配置的channel,這與您的配置一樣,意味着輪詢器線程會使用該消息調用轉換器。

0

通道適配器是一個消息端點,可以將單個發送者或接收者連接到消息通道。

在你的情況下,輸出聲道是 'FileDownloadChannel'

<integration:channel id="FileDownloadChannel"/> 
<int-sftp:inbound-channel-adapter channel="FileDownloadChannel" ...> 
    <integration:poller fixed-rate="10000"/> 
</int-sftp:inbound-channel-adapter> 

爲了在順序中,可以使用消息處理程序鏈以執行任務如下:

<integration:channel id="outputChannel"/> 
<chain input-channel="FileDownloadChannel" output-channel="outputChannel"> 
    <filter ref="someSelector" throw-exception-on-rejection="true"/> 
    <transformer ref="ErrorTransformer"/> 
    <service-activator ref="someService" method="someMethod"/> 
</chain> 
相關問題