Как избежать дублирования обработки файлов по SFTP - PullRequest
0 голосов
/ 04 мая 2018

У нас есть одно java-приложение, которое опрашивает файлы с клиентских FTP через каждые 30 минут, а затем выполняет сканирование всех файлов и проверяет, совпадают ли все файлы с шаблонами, настроенными внутри приложения, и на основе этого обрабатывают файлы соответствующим образом. , Проблема в том, что мы должны выполнять линейное сканирование каждые 30 минут, а это занимает слишком много времени. Поскольку мы не хотим обрабатывать дубликаты файлов, поэтому мы поддерживаем хеш-код файла на нашем конце, а затем проверяем, совпадает ли хеш-код с существующими хеш-кодами. Удаление обработанного файла невозможно из-за разрешений. Нужна помощь здесь о том, как оптимизировать это.

Мы используем библиотеку SSHJ для связи SFTP.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Почему бы не использовать адаптер входящего канала SFTP и объединить его с SftpPersistentAcceptOnceFileListFilter ? Это позволит отслеживать уже загруженные файлы, а не загружать их дважды.

<int-sftp:inbound-channel-adapter ...
    filter="remoteFilter">...</...

<bean class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
    <constructor-arg name="store" ref="metadataStore"/>
    <constructor-arg value="myapp"/>
</bean>

<bean name="metadataStore" class="org.springframework.integration.metadata.PropertiesPersistingMetadataStore">
    <property name="baseDirectory" value="./metadata"/>
</bean>
0 голосов
/ 03 июля 2018

Нельзя сравнивать хеш-код со стороны клиента с хеш-кодом файла с файлом на стороне сервера (поскольку вы должны загрузить файл).

Что вы могли бы сделать: Выполните команду ls на сервере, получите информацию о файле (дата, размер, имя, isDir). используйте это как хеш-код для сравнения. Пропустите тех, чей хеш-код уже существует.

...