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

1. Создание очереди
Элементы очереди обмена данными:

Чтобы создать очередь:
- Перейдите в Роботы → Очереди обмена данными.
- Нажмите Добавить очередь.
- Задайте параметры очереди (см. таблицу ниже).
Общие схемы алгоритмов для обработки очереди:

2. Настройки очереди
Очередь обмена данными может создаваться с настройками (см. таблицу ниже), определяющими её поведение:
| №п/п | Наименование | Описание |
|---|---|---|
| 1. | Время жизни элемента очереди (сек.) | Время, после которого элемент принудительно удаляется из очереди |
| 2. | Максимальное количество попыток поставить элемент в очередь повторно | Когда элемент очереди получает статус Завершилось с ошибкой общего вида или Завершилось с бизнес-ошибкой, он ставится в очередь по FIFO повторно. После превышения этого значения элемент в очередь повторно не ставится |
| 3. | На какие ошибки элемент должен ставиться в очередь повторно | Завершилось с ошибкой общего вида или Завершилось с бизнес-ошибкой |
| 4. | Specific JSON Schema | JSON-схема входных данных, помещаемых в очередь |
| 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. | Приоритет | Определяет порядок обработки элементов в очереди. См. статью Сценарии работы основного пользователя |

Далее приведены дополнительные механизмы и настройки, влияющие на обработку элементов очереди.
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 - текстовая расшифровка события, дополненная более подробным описанием удаления.