Одновременный доступ к одному коннектору
- Если конектор занят одним проектом, а к нему стучатся другие. Что произойдет с запуском других импортов (блокер)
- После того как источник освободился импорт других проектов нужно запустить заново?
- Как устроен модуль блокера
Техническое описание
Проверка допустимо ли начать новый импорт данных или нет осуществляется на сервере Nest.js. Дополнительные запросы от клиентской части не отправляются. Управление данным о блокировке импорта происходит в процессе добавления/снятия задачи в сервисе loader.
Роль сервиса Blocker в процессе импорта данных проекта:
В момент добавления задачи в очередь активных импортов (сервис Loader - bullMQ queue), из микросервиса loader отправляется запрос в сервис Blocker, через канал rabbitMQ. Таким образом на сервере поддерживается информация в каких проектах происходит активный импорт данных.
Повторный запрос на импорт:
Перед добавлением задачи в очередь активных импортов, в сервис Blocker отправляется запрос, с целью проверки, был ли запущен импорт ранее и является ли он активным. Сервис blocker хранит всю служебную информацию в оперативной памяти (массив объектов)
Возможные сценарии при регистрации задачи на импорт данных:
- активна предыдущая задача на импорт данных. Blocker возвращает ошибку в сервис loader. Сервис loader возвращает ошибку в сервис, принимающий пользовательские запросы. Клиенту, отправившему запрос на импорт данных, поверх существующего, возвращается ошибка с сообщением: "Проект/источник с id <id проекта> уже обновляется"
- активных задач по импорту данных для проекта в сервисе Blocker не зарегистрировано. Таким образом, начинается процесс импорта данных и в Blocker регистрируется новая задача по импорту. После успешного импорта, сервис Blocker удаляет запись из внутреннего объекта и следующий запрос может начаться без ошибки