2016-12-14 3 views
0

Я пытаюсь реализовать простой адаптер SFTP-канала, чтобы принимать файлы с любым именем файла (чтобы дублировать имена файлов). Для первого опроса файл передается из каталога SFTP-сервера в локальный каталог, и активист службы, который подписан на этот канал, может получать сообщение, но во второй раз, если я сохраняю файл с тем же именем на сервере SFTP, файл передается, но активатор службы не смог получить сообщение. Я попытался реализовать локальный фильтр, но он перешел в бесконечный цикл (опрос файла и создание сообщения).Spring Integration Переходник SFTP-канала не отправляет сообщение активатору нисходящего потока для второго опроса

конфигурации

<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 вы должны удалить/переименовать файл с локального диска, когда обработка завершена, перед следующим опросом.

Если вы не удаляете удаленный файл, вы также должны использовать FtpPersistentAcceptOnceFileListFilter для удаленного фильтра, чтобы файл не был повторно выбран до тех пор, пока его измененная метка времени не изменится.

+0

Спасибо Гэри за ответ. Но он много раз опроса в течение секунды, хотя у меня есть 1 минута как фиксированная задержка. Пожалуйста, поправьте меня, если я что-то убью. – Abhilash

+0

Не используйте канал очереди; удалите '' из канала и удалите поляллер из активатора службы. Теперь он будет работать на потоке опрокидывателя адаптера. Файл должен быть удален до того, как поток poller адаптера будет возвращен на poller. –

+0

Я удалил очередь из канала, а также poller из активатора службы, но все еще во второй раз опроса адаптера входящего канала несколько раз за 1 секунду. Это происходит, когда я держу только локальный фильтр. – Abhilash