2017-10-18 22 views
0

2つの別々のディレクトリから1つのローカルフォルダにsftp経由でファイルをロードしたいとします。Sftpインバウンドチャネルアダプタ:メッセージの重複

:「リモートのfolder1」になる「のtest.CSV」と呼ばれる新しいファイルは、私がログに次のメッセージを持っている場合

<bean id="lastModifiedFileFilter" class="com.test.sftp.SftpLastModifiedFileListFilter"> 
    <constructor-arg name="age" value="100"/> 
</bean> 

<int:poller id="fixedRatePoller" fixed-rate="100" 
      time-unit="SECONDS"/> 

<int-sftp:inbound-channel-adapter id="inbound1" 
            session-factory="sftpSessionFactory" 
            auto-create-local-directory="true" 
            delete-remote-files="true" 
            remote-directory="/remote-folder1" 
            filter="lastModifiedFileFilter" 
            local-directory="/local-folder" 
            channel="nullChannel"> 
    <int:poller ref="fixedRatePoller"/> 
</int-sftp:inbound-channel-adapter> 

<int-sftp:inbound-channel-adapter id="inbound2" 
            session-factory="sftpSessionFactory" 
            auto-create-local-directory="true" 
            delete-remote-files="true" 
            remote-directory="/remote-folder2" 
            filter="lastModifiedFileFilter" 
            local-directory="/local-folder" 
            channel="nullChannel"> 
    <int:poller ref="fixedRatePoller"/> 
</int-sftp:inbound-channel-adapter> 

例えば:だから私はこのような2つのインバウンドチャネルアダプタを持っています

INFO Created message: [GenericMessage [payload=local-folder/test.csv, headers={id=bb76252a-e826-579d-b0e1-cab55a7cc957, timestamp=1508242673896}]] [task-scheduler-6][FileReadingMessageSource] 
INFO Created message: [GenericMessage [payload=local-folder/test.csv, headers={id=a76de653-f805-8add-1e02-924d0915a18c, timestamp=1508242673962}]] [task-scheduler-2][FileReadingMessageSource] 

これは変だと私はなぜ1つのファイルにつき2つのメッセージがあるのか​​わかりません。多分私は構成が間違っていますか?いくつかはこの行動を説明することができますか?

答えて

0

同じローカルディレクトリに対して2つのポーリングチャネルアダプタがあるため、ここでは混乱しています。そのため、チャネルアダプタの1つがSFTPからファイルをダウンロードし、そのローカルコピーからメッセージを作成します。しかし同時に、同じローカルディレクトリに対して2番目のポーリングアダプタがあります。そうですね、これはリモートディレクトリに対しては何もしませんが、ローカルファイルはここにあり、それはもう一度取得されます。

別のローカルディレクトリを使用するか、別のチャネルアダプタのファイルを "盗む"ことを使用してください。local-filterを使用しないでください。

+0

説明ありがとうございます! 私が一般的に望むのは、リモートサーバからsftp経由でローカルディレクトリに再帰的にファイル(サブディレクトリを含む)をコピーすることです。それ以上の処理をせずにコピーするだけです。 春の統合でこれを行う方法はありますか?私はそのことについて書類には何も見つかりませんでした。あなたは私に助言してもらえますか? –

+0

本当ですか?どのように 'MGET'について:https://docs.spring.io/spring-integration/docs/4.3.12.RELEASE/reference/html/sftp.html#sftp-outbound-gateway? –

関連する問題