2016-12-14 2 views
0

ファイル名を重複させないようにするため、単純なSFTPチャネルアダプタを実装しようとしています。最初のポーリングでは、ファイルはSFTPサーバーディレクトリからローカルディレクトリに転送され、このチャンネルに登録されているサービスアクティベータはメッセージを受信できますが、SFTPサーバーで同じ名前のファイルを保存すると、ファイルが転送されましたが、サービスアクティベータがメッセージを取得できませんでした。ローカルフィルタを実装しようとしましたが、無限ループ(ファイルをポーリングしてメッセージを作成する)に入りました。春の統合SFTPチャネルアダプタは、2番目のポーリングのためにダウンストリームサービスアクティベータにメッセージを送信しません。

設定

<int:channel id="inboundMGetRecursive"> 
    <int:queue/> 
</int:channel> 

<int-sftp:inbound-channel-adapter id="sftpInboundAdapter" 
            auto-startup="true" 
            channel="channel1" 
            session-factory="sftpSessionFactory" 
            local-directory="c:/tmp/" 
            remote-directory="${sftp.file.remote.inbound.dir}" 
            auto-create-local-directory="false" 
            filename-pattern="*.txt" 
            local-filter="acceptAll"> 
    <int:poller fixed-delay="60000" error-channel="sftpExceptionsChannel" 
       max-messages-per-poll="-1"/> 
<bean id="acceptAll" class="org.springframework.integration.file.filters.AcceptAllFileListFilter"/ 
<int:service-activator id="serviceActivator" input-channel="channel1" ref="fileMoverHandler" 
         method="method1"> 
    <int:poller fixed-rate="3000" max-messages-per-poll="-1"/> 
</int:service-activator> 

無限ループログ

2016-12-14 13:25:39,632 [task-scheduler-1] [handlers.FileFilter] INFO - Filter Activated 
2016-12-14 13:25:39,635 [task-scheduler-1] [handlers.FileFilter] INFO - file name : config.txt 
2016-12-14 13:25:39,636 [task-scheduler-1] [file.FileReadingMessageSource] DEBUG - Added to queue: [C:\tmp\csvfiles\staging\config.txt] 
2016-12-14 13:25:39,636 [task-scheduler-1] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=4a062556-4181-2806-d2ee-c0aa3221aec3, timestamp=1481743539636}]] 
2016-12-14 13:25:39,636 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=4a062556-4181-2806-d2ee-c0aa3221aec3, timestamp=1481743539636}] 
2016-12-14 13:25:39,636 [task-scheduler-1] [channel.QueueChannel] DEBUG - preSend on channel 'inboundMGetRecursive', message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=4a062556-4181-2806-d2ee-c0aa3221aec3, timestamp=1481743539636}] 
2016-12-14 13:25:39,636 [task-scheduler-1] [channel.QueueChannel] DEBUG - postSend (sent=true) on channel 'inboundMGetRecursive', message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=4a062556-4181-2806-d2ee-c0aa3221aec3, timestamp=1481743539636}] 
2016-12-14 13:25:39,637 [task-scheduler-1] [handlers.FileFilter] INFO - Filter Activated 
2016-12-14 13:25:39,637 [task-scheduler-1] [handlers.FileFilter] INFO - file name : config.txt 
2016-12-14 13:25:39,637 [task-scheduler-1] [file.FileReadingMessageSource] DEBUG - Added to queue: [C:\tmp\csvfiles\staging\config.txt] 
2016-12-14 13:25:39,638 [task-scheduler-1] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=a2df4814-f759-0440-8ce2-c8d969a9315d, timestamp=1481743539638}]] 
2016-12-14 13:25:39,638 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=a2df4814-f759-0440-8ce2-c8d969a9315d, timestamp=1481743539638}] 
2016-12-14 13:25:39,638 [task-scheduler-1] [channel.QueueChannel] DEBUG - preSend on channel 'inboundMGetRecursive', message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=a2df4814-f759-0440-8ce2-c8d969a9315d, timestamp=1481743539638}] 
2016-12-14 13:25:39,639 [task-scheduler-1] [channel.QueueChannel] DEBUG - postSend (sent=true) on channel 'inboundMGetRecursive', message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=a2df4814-f759-0440-8ce2-c8d969a9315d, timestamp=1481743539638}] 
2016-12-14 13:25:39,639 [task-scheduler-1] [handlers.FileFilter] INFO - Filter Activated 
2016-12-14 13:25:39,639 [task-scheduler-1] [handlers.FileFilter] INFO - file name : config.txt 
2016-12-14 13:25:39,640 [task-scheduler-1] [file.FileReadingMessageSource] DEBUG - Added to queue: [C:\tmp\csvfiles\staging\config.txt] 
2016-12-14 13:25:39,640 [task-scheduler-1] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=fd1ace38-6550-82ea-89c5-2a6229463167, timestamp=1481743539640}]] 
2016-12-14 13:25:39,640 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=fd1ace38-6550-82ea-89c5-2a6229463167, timestamp=1481743539640}] 
2016-12-14 13:25:39,640 [task-scheduler-1] [channel.QueueChannel] DEBUG - preSend on channel 'inboundMGetRecursive', message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=fd1ace38-6550-82ea-89c5-2a6229463167, timestamp=1481743539640}] 
2016-12-14 13:25:39,640 [task-scheduler-1] [channel.QueueChannel] DEBUG - postSend (sent=true) on channel 'inboundMGetRecursive', message: GenericMessage [payload=C:\tmp\csvfiles\staging\config.txt, headers={id=fd1ace38-6550-82ea-89c5-2a6229463167, timestamp=1481743539640}] 

私はすべてのファイルを受け入れるためにフィルタを使用することができますどのように私を助けてください。

答えて

1

accept all local filterを使用する場合は、処理が完了すると、次のポーリングの前にローカルディスクからファイルを削除または名前を変更する必要があります。

リモートファイルも削除しない限り、リモートフィルタにはFtpPersistentAcceptOnceFileListFilter intも使用する必要があります。変更されたタイムスタンプが変更されるまで、ファイルは再フェッチされません。

+0

返信いただきありがとうございます。しかし、私はポーリング固定遅延として1分がありますが、それは1秒以内に何度もポーリングしています。私が何か不足している場合は、私を修正してください。 – Abhilash

+0

キューチャネルを使用しないでください。チャネルから「」を削除し、サービスアクティベータからポーラーを削除します。アダプタのポーラースレッド上で実行されます。アダプター・ポーラーのスレッドがポーラーに戻される前に、ファイルを除去する必要があります。 –

+0

チャネルからキューを削除し、サービスアクティベータからポーラーも削除しましたが、2回目のインバウンドチャネルアダプターポーリングは1秒間に複数回行われます。これは、ローカルフィルタのみを保持しているときに起こります。 – Abhilash

関連する問題