Обработка дублированного файла с помощью FileSystemPersistentAcceptOnceFileListFilter с метаданным хранилища MongoDB - PullRequest
0 голосов
/ 26 марта 2019

Два экземпляра нашего приложения весенней интеграции, развернутые на хосте host1 и host2, обрабатывают входящие файлы в общей точке монтирования / opt / tomcat / in Иногда оба приложения обрабатывают один и тот же файл, что приводит к обработке дублированного файла.

Мы используем ChainFileListFilter как:

public ChainFileListFilter getFilters(String pattern){
    ChainFileListFilter chainFileListFilter = new ChainFileListFilter();
    chainFileListFilter.addFilter(new LastModifiedFileListFilter());
    chainFileListFilter.addFilter(new SimplePatternFileListFilter("*.xml"));
    chainFileListFilter.addFilter(new FileSystemPersistentAcceptOnceFileListFilter(mongoMetadataStore(), ""));
    return chainFileListFilter;
}

Из коллекции MongoDB мы видим, что для файла есть только одна запись.

/* 1 */
{
    "_id" : "/opt/tomcat/in/850/order_12345_2019-03-25_09-00-52.xml",
    "value" : "1553522452000"
}

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

[user@host1.prod.env (prod) logs]$ 
server.log:2019-03-25 **09:30:14.943** INFO  [task-scheduler-4] o.s.i.f.FileReadingMessageSource [FileReadingMessageSource.java:380] Created message: [GenericMessage [payload=/opt/tomcat/in/850/order_12345_2019-03-25_09-00-52.xml, headers={id=2dee86bb-701a-6f55-3e58-6ea3d78cdc30, timestamp=1553524214943}]]


[user@host2.prod.env (prod) logs]$
server.log:2019-03-25 **09:30:16.680** INFO  [task-scheduler-4] o.s.i.f.FileReadingMessageSource [FileReadingMessageSource.java:380] Created message: [GenericMessage [payload=/opt/tomcat/in/850/order_12345_2019-03-25_09-00-52.xml, headers={id=3bc4b67c-a9d0-9f1a-667f-5aaa50c88a1a, timestamp=1553524216680}]]

Приложение построено с использованием Spring Boot Version = '1.5.4.RELEASE'

С несколькими файлами мы не видим проблемы с обработкой дубликатов, однако, с несколькими сотнями (100 200) файлов мы видим проблему с обработкой дубликатов файлов.

1 Ответ

0 голосов
/ 27 марта 2019

Похоже, у вас проблема с тем, что файл был изменен между этими опросами.

FileSystemPersistentAcceptOnceFileListFilter работает так же, как проверяет File.lastModified() и заменяет запись в хранилище, если старое значение отличается.

Вы также можете добавить LastModifiedFileListFilter в цепочку до FileSystemPersistentAcceptOnceFileListFilter. Таким образом, вы не будете опрашивать файл, пока он не станет достаточно старым в соответствии с lastModified().

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