Skip to Content

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

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

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

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

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

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

alt

  • Большие значения задержки увеличивают время пребывания проекта в очереди ожидания. Это снижает частоту проверок, но повышает риск, что другой проект займёт освободившегося робота и фактический порядок выполнения изменится.
  • Малые значения задержки обеспечивают более быстрый возврат проекта в основную очередь и более точное соблюдение приоритетов. Однако при этом растёт нагрузка на систему из-за постоянного поиска свободных роботов.

Очередь с гарантированным порядком запуска проектов

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

Сначала обрабатываются проекты, оставшиеся в очереди с предыдущих итераций, затем — новые. Это обеспечивает порядок FIFO.

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

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

"RobotStart": { "UseRabbitMQ": false, "BatchSize": 10, "ThreadSleep": 500 }
  • BatchSize - количество новых проектов, обрабатываемых за одну итерацию опроса очереди.
  • ThreadSleep - время (мсек) между итерациями опроса.

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

"ProjectQueue": { "CleaningDepth": 7 }

В секции ProjectQueue параметр CleaningDepth позволяет настроить срок автоматической очистки старых записей (в днях).

Дополнительные материалы