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-схема входных данных, помещаемых в очередь
7.Робот может удалять только свои элементыРобот по ключу сможет удалить только те элементы, которые он сам поместил в очередь
8.ПубличнаяДоступна либо всем роботам, либо только перечисленным
9.ЗашифрованаЭлементы очереди будут зашифрованы в БД. Если потом при редактировании очереди снять этот флаг, новые элементы останутся незашифрованными. С версии 1.25.11 В случае работы с зашифрованными очередями (Encrypted = true) блокировка с фильтром по значению теперь запрещена. Если попытаться применить такую блокировку, Оркестратор вернет ошибку HTTP 409 Conflict.
10.Физическое удалениеОпределяет, как элемент будет удален из очереди. Если логически, то они остаются в БД, их можно видеть в UI Оркестратора
11.Кол-во попыток при извлечении элемента по FIFOЧтобы можно было обрабатывать очередь по схеме (принятие решения о завершении не показано), где возврат NULL означает пустую очередь (рисунок “а” ниже).В общем случае обработка очереди при получении NULL должна проходить с повторами получения (обработка ошибок не показана) элемента на стороне клиента (рисунок “б” ниже).
12.Автоматическая очисткаВключение автоматического удаления элементов очереди. Настраивается тип очистки

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

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

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

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

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

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

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

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

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

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

Решение о терминальности статуса Success/Error/Busines 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)

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

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

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

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

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

  • запускается автоматически при старте WebApi;
  • выполняет удаление элементов в соответствии с параметрами настройки очереди;
  • работает с заданным интервалом.

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

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

  • ExchangeQueueValuesAutoDeleteInterval - значение интервала в минутах.

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

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

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

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

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

ExchangeQueueItemsAutoDeleteServiceSuccess = 3030, ExchangeQueueItemsAutoDeleteServiceError = 3031,

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

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

При наличии у очереди включённой опции автоматической очистки и при фактическом выполнении удаления элементов в журнал Оркестратора добавляется одно из этих событий.

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

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