Блокировка файлов и нескольких узлов (по моему опыту) не очень надежно . Когда клиенты распределяются, должна поддерживаться распределенная блокировка файлов, и я не знаю, что уровень FTP добавляет к этому соединению, но я не думаю, что это облегчает это.
Обычно эти ошибки "просто" поступают от одного узла, который пытается обработать уже обработанный (и, следовательно, удаленный) файл . Таким образом, они не являются реальной проблемой , и если вы можете жить с ними, ваша установка, вероятно, работает правильно (файлы на самом деле не обрабатываются несколько раз).
Я обычно делаю
- Используйте опции
initialDelay
и delay
для , чтобы все узлы не опрашивались одновременно - Используйте параметр
shuffle=true
, чтобы каждый клиент случайным образом перемешивал список файлов . Это снижает вероятность того, что все клиенты попытаются обработать один и тот же файл
Они также ненадежны, в лучшем случае могут быть улучшением.
Единственный способ надежно избежать обработки один и тот же файл с несколькими узлами, возможно, использует только один потребитель . Мы используем эту настройку в комбинации с проверками работоспособности и автоматическими c перезапусками , чтобы убедиться, что единственный потребитель доступен.
Обратите внимание, что добавление идемпотентного репозитория стоит ничего, пока вы не используете распределенный репозиторий , как hazelcast. Если вы используете только локальный репозиторий (или просто репозиторий в памяти), он индивидуален для каждого узла и поэтому просто избегает, чтобы один и тот же клиент обрабатывал один и тот же файл несколько раз.
Обновление из-за комментария
Когда вы получили распределенное идемпотентное хранилище и файлы были обработаны несколько раз, хранилище не работает. Я могу только предположить некоторые вещи, которые могут быть источником
- Хранилище ничего не делает (проверка записей)
- Вы должны установить
readLock
в idempotent
, чтобы «включить» хранилище для файлового компонента - По тем или иным причинам один и тот же файл из разных узлов имеет разные идентификаторы идемпотентности (проверьте в своем репо), и поэтому они не распознаются как дубликаты
К сожалению, idempotent
Настройка readLock
поддерживается только для файлового компонента , но не для компонента FTP .
Существует также inProgressRepository
. Вы также можете попытаться прикрепить свой репозиторий с этой опцией.