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