Skip to main content

Одновременный доступ к одному коннектору

  1. Если конектор занят одним проектом, а к нему стучатся другие. Что произойдет с запуском других импортов (блокер)
  2. После того как источник освободился импорт других проектов нужно  запустить заново?
  3. Как устроен модуль блокера


Техническое описание

    Проверка возможности запуска импорта данных осуществляется на сервере Nest.js. Дополнительные запросы от клиентской части не отправляются. Обновление информации о блокировке импорта происходит в процессе добавления/снятия/выполнения задачи в сервисе loader.
    Подробное техническое описание запуска процесса импорта см. раздел "Логирование данных о загрузке скрипта". В данном разделе внимание уделяется сервису Blocker, который запрещает выполнять импорт данных в проект, если ранее запущенный ещё активен

Роль сервиса Blocker в процессе импорта данных проекта:
    В момент добавления задачи в очередь активных импортов (сервис Loader - bullMQ queue), из микросервиса loader отправляется запрос в сервис Blocker, через канал rabbitMQ. Таким образом на сервере поддерживается информация в каких проектах происходит активный импорт данных.

Повторный запрос на импорт:
    Перед добавлением задачи в очередь активных импортов, в сервис Blocker из сервиса loader отправляется запрос, с целью проверки, был ли запущен импорт ранее и является ли он активным. Сервис blocker хранит всю служебную информацию в оперативной памяти (массив объектов)

Возможные сценарии при регистрации задачи на импорт данных:
     - предыдущая задача на импорт данных активна. Blocker возвращает ошибку в сервис loader. Сервис loader возвращает ошибку в сервис, принимающий пользовательские запросы. Клиенту, отправившему запрос на импорт данных, поверх существующего, возвращается ошибка с сообщением: "Проект/источник с id <id проекта> уже обновляется"

    - активных задач по импорту данных для проекта в сервисе Blocker не зарегистрировано. Таким образом, начинается процесс импорта данных и в Blocker регистрируется информация об активной задаче по проекту. После успешного импорта, сервис Blocker удаляет запись из внутреннего хранилища и следующий запрос может начаться без ошибки