2016-05-28 3 views
1

У меня есть требование для обработки любого файла, который помещается в определенную папку. Эти файлы могут иметь одинаковые имена. Позже он будет обработан запатентованным компонентом, который переименует расширение файла на основе повторяющегося статуса имени файла (xxx.origin, если файл никогда не обрабатывался до или xxx.duplicate для противоположного условия).Файл входящего канала адаптера процесса тот же файл одновременно

Основываясь на этом требовании, я решил использовать file-inbound-channel-adapter, с spring-integration-3.0.8. Я установил атрибут prevent-duplicates в false, поэтому я могу обрабатывать все файлы. Однако я обнаружил, что 1 файл может обрабатываться одновременно 2 file-inbound-channel-adapter (хотя второй адаптер был создан случайно - дважды инициализирован в контексте и сервлет). Но для меня это проблема, потому что я намеревался создать более 1 file-inbound-channel-adapter для обработки всех файлов в одной папке, и я получаю результат: 1 входной файл обрабатывается дважды на 2 боба в то же время, выходной файл (xxx.origin и xxx.duplicate). Я также не могу использовать FileLocker, потому что file-to-string-transformer не может работать из-за статуса блокировки файла.

Есть ли способ достичь этого?

ответ

1

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

Если вам необходимо иметь несколько экземпляров адаптера, и вы можете использовать более новую версию Spring Integration (4.1.7 или выше, текущая версия 4.2.6), вы можете использовать аа общего AcceptOnceFileListFilter, который теперь ResettableFileListFilter так, когда ты переименуйте файл, который вы можете удалить из фильтра.

Если вы не можете перейти в более новую версию Spring Integration, вам понадобится настраиваемый FileListFilter, который позволит вам удалить файл после обработки.

+0

Привет, Гэри, спасибо за ответ. Мне нужно, чтобы несколько адаптеров опросили один и тот же каталог, потому что моя идея состоит в том, чтобы иметь несколько компонентов для обработки большого количества файлов в каталоге. Поэтому вместо 1 компонента обрабатывать, скажем, 100 файлов, я хочу использовать 4 компонента, чтобы все файлы обрабатывались быстрее. В настоящее время моя конфигурация - это адаптер входящего файла -> text to string transformer -> service activator -> исходящий адаптер. Активатором службы является мой собственный компонент для обработки файла. Поэтому я думаю, что я должен использовать 4 набора вышеуказанных конфигураций. –

+0

Но вы можете добиться того же самого с помощью одного адаптера и объединенного исполнителя задач с 4 потоками. –

Смежные вопросы