Настройка очереди проектов

Очередь на основе RabbitMQ

По умолчанию используется очередь проектов на основе RabbitMQ (рекомендуемый вариант). Такая очередь работает по принципу:

  1. Для выполнения проекта Оркестратор ставит проект в очередь.

  2. При выходе проекта из очереди Оркестратор ищет свободного подходящего робота:

    • если находит – робот запускается с проектом;

    • если не находит – проект отправляется в одну из очередей ожидания в зависимости от своего приоритета (1 – 3). По истечении времени ожидания (несколько секунд) проект выходит из очереди ожидания и снова отправляется в очередь проектов (п.1).

Таким образом, очередь представляет циклический буфер, который по мере добавления в очередь новых проектов и при отсутствии роботов будет увеличиваться.

Настройка времени задержки в очереди ожидания осуществляется в секции RabbitMQ:

Чем выше эти значения, тем дольше проект будет находиться в очереди ожидания, и тем выше вероятность, что пока проект будет там находиться, другой проект успеет занять освободившегося робота, изменив, возможно, ожидаемый порядок выполнения проектов.

Чем меньше эти значения, тем выше нагрузка на систему – будет происходить постоянный поиск подходящего робота, хотя это, возможно, заведомо не нужно для таких временных промежутков, если проекты выполняются достаточно долго.

Очередь на основе опроса БД

Описанное выше поведение очереди можно изменить на очередь с гарантированным порядком запуска проектов. Проектам должны быть назначены приоритеты. Очередь на основе опроса БД работает по принципу:

  1. Сначала обрабатываются все элементы очереди, которые уже не получили свободных роботов.

  2. И только потом - новые элементы (проекты).

Для этого в конфигурационном файле WebApi, в секции RobotStart, устанавливаем значение параметра "UseRabbitMQ": false.

И указываем параметры:

  • BatchSize - количество новых проектов, обрабатываемых за одну итерацию опроса очереди.

  • ThreadSleep - время (мсек) между итерациями опроса.

Приоритеты проектам назначает пользователь в UI Оркестратора, в форме добавления/редактирования проектов.

🔸 В секции ProjectQueue параметр CleaningDepth позволяет настроить периодичность автоматического удаления из очереди проектов записей, старше (дней), чем текущее время.

Last updated