Skip to Content
Primo RPA OrchestratorПользователямРоботыОчереди обмена данными

Очереди обмена данными

Очереди обмена данными – это структуры данных в базе данных Оркестратора, используемые для организации коммуникации роботов при выполнении RPA-проектов.

Очереди могут работать по принципу FIFO («первым пришёл – первым обслужен») или по фильтру с блокировкой, при котором элемент извлекается только одним роботом. Чтение с фильтром гарантирует эксклюзивный доступ к элементу и оптимально использует блокировки в базе данных.

Особенности версии 1.25.11: при фильтрации с опцией Занимать (в Студии - активность Получить из очереди по фильтру) блокировка применяется только к элементам, соответствующим фильтру. Для зашифрованных очередей блокировка с фильтром запрещена (ошибка HTTP 409 Conflict).

alt

1. Создание очереди

Элементы очереди обмена данными:

alt

Чтобы создать очередь:

  1. Перейдите в Роботы → Очереди обмена данными.
  2. Нажмите Добавить очередь.
  3. Задайте параметры очереди (см. таблицу ниже).

Общие схемы алгоритмов для обработки очереди:

alt

2. Настройки очереди

Очередь обмена данными может создаваться с настройками (см. таблицу ниже), определяющими её поведение:

№п/пНаименованиеОписание
1.Время жизни элемента очереди (сек.)Время, после которого элемент принудительно удаляется из очереди
2.Максимальное количество попыток поставить элемент в очередь повторноКогда элемент очереди получает статус Завершилось с ошибкой общего вида или Завершилось с бизнес-ошибкой, он ставится в очередь по FIFO повторно. После превышения этого значения элемент в очередь повторно не ставится
3.На какие ошибки элемент должен ставиться в очередь повторноЗавершилось с ошибкой общего вида или Завершилось с бизнес-ошибкой
4.Specific JSON SchemaJSON-схема входных данных, помещаемых в очередь
5.Робот может удалять только свои элементыРобот по ключу сможет удалить только те элементы, которые он сам поместил в очередь
6.ПубличнаяДоступна либо всем роботам, либо только перечисленным
7.ЗашифрованаЭлементы очереди будут зашифрованы в БД. Если потом при редактировании очереди снять этот флаг, новые элементы останутся незашифрованными. С версии 1.25.11 В случае работы с зашифрованными очередями (Encrypted = true) блокировка с фильтром по значению теперь запрещена. Если попытаться применить такую блокировку, Оркестратор вернет ошибку HTTP 409 Conflict.
8.Физическое удалениеОпределяет, как элемент будет удален из очереди. Если логически, то они остаются в БД, их можно видеть в UI Оркестратора
9.Кол-во попыток при извлечении элемента по FIFOЧтобы можно было обрабатывать очередь по схеме (принятие решения о завершении не показано), где возврат NULL означает пустую очередь (рисунок “а” ниже).В общем случае обработка очереди при получении NULL должна проходить с повторами получения (обработка ошибок не показана) элемента на стороне клиента (рисунок “б” ниже).
10.Автоматическая очисткаВключение автоматического удаления элементов очереди. Настраивается тип очистки

3. Элементы очереди

Текущее состояние элемента можно увидеть в таблице, в колонке Статус.

Каждый элемент имеет статус:

  • New — элемент добавлен, но не извлечен.
  • InProgress — элемент извлечен роботом.
  • Success — обработка элемента завершена успешно.
  • Error — обработка элемента завершена с общей ошибкой.
  • Business Error — обработка завершена с бизнес-ошибкой.

Созданный элемент автоматически получает статус New (Новый). Последующая смена статусов зависит от обработки элемента роботом.

Статусы New и InProgress вычисляются системой. Финальные статусы фиксируются в истории.

Присвоение финальных статусов (Success, Error, Business Error) возможно только из статуса InProgress — т.е. когда элемент извлечен роботом для дальнейшей работы.

Элементы можно удалять, клонировать и повторять:

  • Клонирование — создается новый элемент (с новым идентификатором) со статусом Новый, полностью аналогичный оригиналу, но с нулевым счетчиком повторов.
  • Повторение — сбрасывается признак прочтения (элемент переходит в состояние Новый), ссылка на текущий статус и счетчик повторов. Физически – это тот же самый элемент (не меняется идентификатор).

По событиям, связанным с работой роботов с очередью, вычисляется статистика по очереди – количество элементов очереди в разных статусах и график среднего времени (по окну) обработки элемента очереди роботом (разница времени прочтения элемента и проставления ему финального статуса).

Решение о терминальности статуса Success/Error/Business Error принимается клиентом. В истории статусов может быть более одного элемента.

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

№п/пНаименованиеОписание
1.Натуральный ключСодержательный идентификатор элемента очереди. Может быть глобальным в пределах очереди, в пределах всех очередей или уникальность может отсутствовать
2.МетаданныеСловарь Ключ-значение с произвольными строковыми данными. При обновлении метаданные полностью переписываются
3.Дата, до которой элемент считается недоступнымЭлемент недоступен для обработки до указанной даты
4.Дата, после которой элемент считается недоступнымЭлемент недоступен для обработки после указанной даты
5.Статус элемента очередиТекущий статус элемента в истории его статусов. В UI статусы отображаются следующим образом: New – элемент добавлен в очередь, еще не извлечен. In Progress – элемент извлечен из очереди. Success – обработка элемента завершена успешно. Error – обработка элемента завершена с ошибкой общего вида. Business Error – обработка элемента завершена с бизнес-ошибкой
6.ТегиПроизвольные строки, по которым может осуществляться поиск элементов
7.ПриоритетОпределяет порядок обработки элементов в очереди. См. статью Сценарии работы основного пользователя

alt

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

JSON-схемы для очередей

При создании очереди обмена данными можно задать Specific JSON Schema для валидации входных данных элементов очереди.

Примечание: Output JSON Schema и Analytics JSON Schema в настоящее время не используются в Оркестраторе.

Пример JSON-схемы для валидации данных

{ "type": "object", "properties": { "prop1": { "type": "string" }, "prop2": { "type": "array" } }, "additionalProperties": false }

Пример данных, соответствующих схеме:

{ "prop1": "James", "prop2": [".NET", "LOLCATS"] }

Автоматическая очистка очередей обмена данными (доступно с версии 1.25.11)

alt

В Оркестраторе реализован функционал автоматического удаления элементов из очередей обмена данными. Настройка выполняется в форме Роботы → Очереди обмена данными → Редактировать очередь → Автоматическая очистка очереди от старых элементов

Параметры настройки

НаименованиеОписание
Тип очисткиОпределяет условие автоматического удаления элементов очереди. Доступные варианты: • Очистка не производится - автоматическое удаление отключено; • При превышении возраста элемента - удаляются элементы, возраст которых превышает указанное значение; • При превышении максимального количества элементов - удаление выполняется при превышении заданного лимита размера очереди.
Значение параметраЧисловой параметр, используемый выбранным типом очистки (отображается только при активном соответствующем типе).

Механизм выполнения очистки

Автоматическое удаление элементов выполняет служба WebApi - ExchangeQueueValuesAutoDeleteService.

  • запускается автоматически при старте WebApi;
  • удаляет элементы только в тех очередях, где включена функция автоматической очистки;
  • работает с заданным интервалом.

Интервал выполнения очистки

Интервал задаётся параметром конфигурации WebApi:

  • ExchangeQueueValuesAutoDeleteInterval - интервал выполнения очистки в минутах.

  • Параметр не добавляется в конфигурационный файл по умолчанию и может быть внесён вручную;

  • минимальное значение - 5 минут;

  • значение по умолчанию - 60 минут.

Записи в журнале событий Оркестратора

При выполнении очистки создаются записи в Журнале событий Оркестратора.

В общее перечисление OrchestratorEvent, используемое всеми сервисами Оркестратора, добавлены два новых события:

ExchangeQueueItemsAutoDeleteServiceSuccess = 3030, ExchangeQueueItemsAutoDeleteServiceError = 3031,
{OrchestratorEvent.ExchangeQueueItemsAutoDeleteServiceSuccess, "Очередь обмена для роботов - автоматическая очистка элементов очереди: успешно"}, {OrchestratorEvent.ExchangeQueueItemsAutoDeleteServiceError, "Очередь обмена для роботов - автоматическая очистка элементов очереди: ошибка"},

События создаются только при фактическом удалении элементов или при возникновении ошибки во время очистки.

Подробнее обо всех событиях Оркестратра см. в статье Перечень событий Оркестратора

Структура записей журнала:

  • EntityData - идентификатор очереди, для которой была выполнена очистка;
  • Text - текстовая расшифровка события, дополненная более подробным описанием удаления.

Для настройки минимальных порогов очистки добавлены параметры в конфигурационный файл WebApi:

{ "ExchangeQueue": { /* Интервал (минут) между запусками автоматического удаления старых элементов очередей обмена данными (допустимый минимум 5 минут) */ "ExchangeQueueValuesAutoDeleteInterval": 5, // 60, /* Минимально возможное кол-во дней для срабатывания автоматического удаления/архивации старых элементов очередей обмена данными */ "MinExchangeQueueValuesDeleteLimitDays": 30, /* Минимально возможное кол-во элементов очереди для срабатывания автоматического удаления/архивации старых элементов очередей обмена данными */ "MinExchangeQueueValuesDeleteLimitElements": 100000 } }

Автоматическая архивация очередей обмена данными

Доступно с версии 1.26.1 / 1.25.7.20 LTS

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

Особенности:

  1. Сохранение данных — элементы не удаляются безвозвратно, а переносятся в архивные таблицы (ExchangeQueueValuesArchive, TagsArchive и др.)
  2. Возможность просмотра — архивные данные доступны через интерфейс Orchestrator с использованием фильтра archive=true
  3. Расширенная конфигурация — добавлены параметры для настройки минимальных порогов архивации

alt

Для новых установок:

  1. При создании или редактировании очереди перейдите в настройки “Автоматическая архивация очереди”
  2. Выберите тип архивации:
    • “Архивация не выполняется” — функция отключена
    • “При превышении возраста элемента” — архивация по времени (дни)
    • “При превышении максимального количества элементов” — архивация по объёму (Например, 500 элементов за одну транзакцию архивации)
  3. Укажите значение параметра (количество дней или элементов)

Конфигурационные параметры для архивации:

{ "ExchangeQueue": { /* Минимальный возраст элемента (в днях) для архивации */ "MinExchangeQueueArchiveLimitDays": 30, /* Минимальное количество элементов очереди для архивации */ "MinExchangeQueueArchiveLimitElements": 100000, /* Интервал (минут) между запусками автоматической архивации */ "ExchangeQueueValuesAutoDeleteInterval": 60 } }

Пример настройки:

{ "ExchangeQueue": { "MinExchangeQueueArchiveLimitDays": 7, "MinExchangeQueueArchiveLimitElements": 50000, "ExchangeQueueValuesAutoDeleteInterval": 30 } }

В этом примере:

  • Архивация сработает для элементов старше 7 дней
  • При достижении 50 000 элементов в очереди
  • Служба архивации будет запускаться каждые 30 минут

Архивные данные очередей обмена содержатся в новых таблицах БД ltools:

alt

Рекомендации

Если архивные таблицы содержат большое количество записей, рекомендуется периодически переносить данные на внешний накопитель и очищать таблицы после остановки Оркестратора.

В LTS-ветке 1.25.7 архивация доступна с патча 1.25.7.20. В более ранних версиях доступна только очистка элементов без возможности просмотра.