Как получить параллельный доступ к файлам из общего расположения для 2 экземпляров службы Springboot? - PullRequest
0 голосов
/ 17 июня 2019

Существует 2 экземпляра службы весенней загрузки, которые читают файлы, поступающие в определенное место.Если в расположение добавляется новый файл, то обе службы читают файл вместе.Цель состоит в том, чтобы 2 экземпляра параллельно обрабатывали новые файлы.

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

1 Ответ

0 голосов
/ 18 июня 2019

Я бы следовал одному из простых вариантов ниже.

  1. Хранить список обработанных файлов : Идея состоит в том, чтобы записать полный путь обработанного файла в другой файл, таблицу базы данных или, возможно, даже в область памяти. Служба, которая сначала читает файл, сначала создает запись в этом пространстве. Это для маркировки файла. Другой сервис ищет путь к файлу, прежде чем он начнет обработку вновь созданного файла. Но он не сможет продолжить, поскольку он уже там.

  2. Переместить обработанный файл : создать папку для архивирования обработанных файлов. Служба читает файл, сначала перемещает файл туда и выполняет обработку. Другой сервис не сможет прочитать этот файл. Кстати, эта опция может оказаться недействительной, если вам не разрешено перемещать файл. В этом случае попробуйте сделать копию файла.

  3. Скопировать обработанный файл : аналогично элементу № 1. Сделайте копию файла в папке. Служба читает файл, сначала копирует файл туда и продолжает. Другая служба ищет имя (или другой идентификатор) файла в этой папке копирования. Не удастся продолжить, так как он уже там.

Может быть создано много других вариантов, но основная идея заключается в том, чтобы пометить этот путь к файлу, чтобы он уже обрабатывался или находился в процессе.

Обратите внимание, что вам придется откатиться, если вы не можете завершить обработку файла. В зависимости от выбранной опции, вам нужно удалить запись в списке или переместить файл назад в исходный каталог или удалить копию этого файла.

...