Настройка очереди проектов
Last updated
Last updated
По умолчанию используется очередь проектов на основе RabbitMQ (рекомендуемый вариант). Такая очередь работает по принципу:
Для выполнения проекта Оркестратор ставит проект в очередь.
При выходе проекта из очереди Оркестратор ищет свободного подходящего робота:
если находит – робот запускается с проектом;
если не находит – проект отправляется в одну из очередей ожидания в зависимости от своего приоритета (1 – 3). По истечении времени ожидания (несколько секунд) проект выходит из очереди ожидания и снова отправляется в очередь проектов (п.1).
Таким образом, очередь представляет циклический буфер, который по мере добавления в очередь новых проектов и при отсутствии роботов будет увеличиваться.
Настройка времени задержки в очереди ожидания осуществляется в секции RabbitMQ:
Чем выше эти значения, тем дольше проект будет находиться в очереди ожидания, и тем выше вероятность, что пока проект будет там находиться, другой проект успеет занять освободившегося робота, изменив, возможно, ожидаемый порядок выполнения проектов.
Чем меньше эти значения, тем выше нагрузка на систему – будет происходить постоянный поиск подходящего робота, хотя это, возможно, заведомо не нужно для таких временных промежутков, если проекты выполняются достаточно долго.
Описанное выше поведение очереди можно изменить на очередь с гарантированным порядком запуска проектов. Проектам должны быть назначены приоритеты. Очередь на основе опроса БД работает по принципу:
Сначала обрабатываются все элементы очереди, которые уже не получили свободных роботов.
И только потом - новые элементы (проекты).
Для этого в конфигурационном файле WebApi, в секции RobotStart, устанавливаем значение параметра "UseRabbitMQ": false
.
И указываем параметры:
BatchSize - количество новых проектов, обрабатываемых за одну итерацию опроса очереди.
ThreadSleep - время (мсек) между итерациями опроса.
Приоритеты проектам назначает пользователь в UI Оркестратора, в форме добавления/редактирования проектов.
🔸 В секции ProjectQueue параметр CleaningDepth
позволяет настроить периодичность автоматического удаления из очереди проектов записей, старше (дней), чем текущее время.