Skip to main content

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

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


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

Проверка допустимо ли начать новый импорт данных или нет осуществляется на сервере Nest.js. Дополнительные запросы от клиентской части не отправляются. Управление данным о блокировке импорта происходит в процессе добавления/снятия задачи в сервисе loader.

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

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

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

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