Адаптер входящего канала Spring File замедляется - PullRequest
0 голосов
/ 12 июня 2018

У меня есть поток весенней интеграции, который начинается с файла-адаптера входящего канала, активируемого транзакционным поллером (tx обрабатывается atomikos).Текст в файле обрабатывается, и сообщение проходит через поток, пока не будет отправлено в одну из очередей JMS (адаптер исходящего канала JMS).Посередине, есть некоторые записи базы данных в рамках вложенной транзакции.Система предназначена для работы 24/7.

Бывает, что единый поток сообщений постепенно замедляется, и когда я исследовал, я обнаружил, что этап, который отвечает за увеличение задержки, - это чтение из файловой системы.

Ниже приведена первая часть потока интеграции:

<logging-channel-adapter id="logger" level="INFO"/>
<transaction-synchronization-factory id="sync-factory">
    <after-commit expression="payload.delete()" channel="after-commit"/>
</transaction-synchronization-factory>
<service-activator input-channel="after-commit" output-channel="nullChannel" ref="tx-after-commit-service"/>



<!-- typeb inbound from filesystem -->
<file:inbound-channel-adapter id="typeb-file-inbound-adapter"
                              auto-startup="${fs.typeb.enabled:true}"
                              channel="typeb-inbound"
                              directory="${fs.typeb.directory.in}"
                              filename-pattern="${fs.typeb.filter.filenamePattern:*}"
                              prevent-duplicates="${fs.typeb.preventDuplicates:false}" >
    <poller id="poller"
            fixed-delay="${fs.typeb.polling.millis:1000}"
            max-messages-per-poll="${fs.typeb.polling.numMessages:-1}">
        <transactional synchronization-factory="sync-factory"/>
    </poller>
</file:inbound-channel-adapter>
<channel id="typeb-inbound">
    <interceptors>
        <wire-tap channel="logger"/>
    </interceptors>
</channel>

Я прочитал кое-что о проблемах, связанных с параметром предотвращения дубликатов, в котором хранится список просмотренных файлов, но это недело, потому что я выключил его.Я не думаю, что это может быть связано с фильтром (filename-pattern), потому что выражение, которое я использую в моей конфигурации (* .RCV), легко применить, а входная папка не содержит много файлов (меньше 100) одновременно.

Тем не менее, есть кое-что, что постепенно делает чтение из файловой системы медленным и медленным с течением времени, от нескольких миллисекунд до более 3 секунд в течение нескольких дней бездействия.

Любые намеки?

Ответы [ 2 ]

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

Наконец-то я получил решение.Проблема была связана с конкретной версией Spring, которую я использовал (4.3.4), на которую повлияла ошибка, которую я еще не обнаружил.Проблема заключается в использовании DefaultConversionService и использовании converterCache (подробнее см. Здесь https://jira.spring.io/browse/SPR-14929). Устранено обновление до более поздней версии.

0 голосов
/ 12 июня 2018

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

В более новых версиях вы можете использовать WatchServiceDirectoryScanner , который более эффективен.

Но все же рекомендуется удалять старыефайлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...