Получить из очереди по фильтру
Eng: Peek queue by filter

Компонент позволяет получить элементы из очереди Оркестратора в соответствии с настроенным фильтром. Результат сохраняется в переменную.
Поведение при извлечении элементов
В свойствах компонента доступен параметр Занимать. Включенный параметр позволяет сразу же извлечь полученные элементы из очереди. Извлекать из очереди возможно только новые элементы (статус New) – то есть те, которые еще не занял ни один робот.
Если элемент извлечен, то другие роботы не смогут взять его в работу. Данный элемент перейдет из статуса New в статус InProgress. После извлечения только текущий робот может:
Если параметр Занимать отключён, статус элементов в очереди не изменяется.
Ограничение частоты запросов (Rate limiting)
Начиная с версии Оркестратора 1.26.5 (и соответствующих версий пакетов Primo.Orchestrator.Client.Common / Primo.Orchestrator.Client.NS) для метода PeekQueueByFilter (активность «Получить из очереди по фильтру») может быть включено ограничение частоты запросов.
Параметры ограничения задаются администратором Оркестратора в конфигурацинном файле (ExchangeQueue:Limits:RateLimiters:PeekByFilter):
PermitLimit– максимальное количество запросов в окне (по умолчанию 10)Window– временное окно (по умолчанию 10 секунд)QueueLimit– размер очереди ожидания (0 – очередь не используется)QueueProcessingOrder– порядок извлечения из очереди (0 – старые первыми)
Ограничение применяется отдельно для каждого тенанта (по заголовку TenantId).
Если секция в конфигурации отсутствует или Enabled: false, rate limiting не действует.
Поведение при превышении лимита
- Если клиент (робот) превышает допустимое количество запросов, сервер возвращает HTTP-статус 429 Too Many Requests.
- В активности возникает исключение
Status429TooManyRequestsException. - У исключения есть свойство
RetryAfter(значение в секундах) – рекомендуемая задержка перед повторным запросом. - В некоторых случаях (при использовании очереди ожидания) срабатывание лимитера может приводить к искусственному увеличению времени отклика вплоть до таймаута операции (задаётся свойством Таймаут).
Перед началом работы
- Настроено активное подключение к Оркестратору.
- Очередь и элементы, к которым выполняется обращение, должны существовать.
Свойства
Символом * отмечены обязательные для заполнения свойства. Описание общих свойств см. здесь.
Процесс:
-
Занимать [Boolean] – определяет, требуется ли извлекать из очереди полученные элементы. Возможные значения:
галочка отсутствует– элементы не нужно извлекать из очереди. В этом случае статус элементов, полученных по фильтру, не изменится. Значение по умолчанию.галочка установлена– элементы извлекаются, статус изменяется на InProgress. С версии 1.25.11+ блокировка применяется только к элементам, соответствующим фильтру (ранее блокировалась вся очередь).
-
Игнорировать спецполя [Boolean] – Определяет состав выборки - отсроченные, просроченные и логически удаленные элементы (которые не удаляли из БД). Возможные значения:
галочка отсутствует– в выборку попадают только отложенные элементы (с непустым PostponeAt). Значение по умолчанию.галочка установлена– расширяет выборку, включая также логически удаленные элементы (DeletedAt). При включении этого параметра рекомендуется отключить свойство Занимать.
-
Ключ [String] – Натуральный ключ элемента очереди, который указывался при создании элемента (поле
Keyв модели QueueItem). Пример:"MyKey". -
Кол-во [Int32] – Количество элементов, которые необходимо получить. Возвращается список (
List) элементов. Если не заполнено или указано0, возвращается 1 элемент. Пример:10. -
Логика – настраивает логику поиска элемента по тегам. Доступные значения:
Or– элемент должен содержать хотя бы один из указанных тегов (по умолчанию).And– у элемента должны быть все перечисленные теги.
-
Очередь* [String] – название очереди в Оркестраторе. Пример:
"Queue1". -
Получать метаданные [Boolean] — Определяет, нужно ли получать системные метаданные элемента (дата создания, автор и т.д.). По умолчанию свойство включено.
-
Получать тэги [Boolean] — Определяет, нужно ли получать теги элемента. Если параметр включен, теги элемента будут извлечены из данных очереди Оркестратора. По умолчанию свойство включено. Рекомендуется отключать, если теги не используются в логике процесса. Это существенно снижает нагрузку на Оркестратор и ускоряет выполнение операции.
-
Статус – фильтр по статусу элемента очереди. Доступные значения:
Любой– статус элемента не важен. Значение по умолчанию.Новый– элемент создан, еще не занят роботом.В процессе– элемент извлечен, но не обработан.Успешно– элемент извлечен из очереди и успешно обработан.Ошибка– элемент извлечен из очереди, но его обработка завершилась с ошибкой общего вида.Ошибка в бизнес-логике– элемент извлечен из очереди, но его обработка завершилась с бизнес-ошибкой.Удалён– элемент помечен как удалённый (логическое удаление). Доступно с версии 1.26.1.Отложен– элемент отложен для обработки до наступления указанного времени (PostponeAt). Доступно с версии 1.26.1
-
Страница [Int32] – номер страницы очереди Оркестратора, на которой находится искомый элемент. Пример:
1. -
Таймаут [Int32] – Лимит времени выполнения операции (мс). Если операция не завершена за указанное время, робот завершает работу с ошибкой. Значение по умолчанию:
30000(30 секунд). -
Только свои [Boolean] – При установке флага будут получены только элементы, добавленные в очередь с идентичной учетной записи (тем же роботом).
-
Тэги [List<string>] – фильтр по тегам элемента очереди. Пример:
new List<string>() { "tag1", "tag2", "tag3" }. -
Фильтр [String] – фильтр по метаданным элемента, указывается в виде регулярного выражения для SQL:
- если Оркестратор установлен с MSSQL SERVER – следует использовать шаблоны с оператором LIKE (но без указания оператора, только шаблон).
- если Оркестратор установлен с PostgreSQL – доступны функции Regexp. Пример:
"%1330\\|15.07.2022%".
-
Фильтр по значению [String] – фильтр по значению элемента, указывается в виде регулярного выражения. Пример:
"\\w+".
Вывод:
- Элемент [List<LTools.Enterprise.Model.QueueItem>] – название переменной, в которую запишется список элементов очереди, соответствующих заданным условиям фильтра.
Ограничения и особенности
- При выборе статуса Отложен возвращаются все записи с непустым
PostponeAt, независимо от того, наступило ли время обработки. - Поиск удаленных элементов:
Для получения элементов в статусе Удалён или Отложен (включая удаленные) необходимо:- Установить соответствующий статус в фильтре
- Включить параметр Игнорировать спецполя
Только код (Pure code)
Ниже приведен пример использования элемента в процессе с типом Только код (Pure code):
C#
object ret = LTools.Enterprise.OrchestratorApp.PeekQueueByFilter(wf, "queue", id, ".name", LTools.Enterprise.Model.QueueItemStates2.Any, false, 10);Дополнительно
- Изменить статус в очереди — присваивает элементу финальный статус обработки.
- Удалить из очереди — удаляет элемент из очереди.