Skip to Content

Получить из очереди по фильтру

Eng: Peek queue by filter

alt

Компонент позволяет получить элементы из очереди Оркестратора в соответствии с настроенным фильтром. Результат сохраняется в переменную.

Поведение при извлечении элементов

В свойствах компонента доступен параметр Занимать. Включенный параметр позволяет сразу же извлечь полученные элементы из очереди. Извлекать из очереди возможно только новые элементы (статус 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 (значение в секундах) – рекомендуемая задержка перед повторным запросом.
  • В некоторых случаях (при использовании очереди ожидания) срабатывание лимитера может приводить к искусственному увеличению времени отклика вплоть до таймаута операции (задаётся свойством Таймаут).

Перед началом работы

  • Настроено активное подключение к Оркестратору.
  • Очередь и элементы, к которым выполняется обращение, должны существовать.

Свойства

Символом * отмечены обязательные для заполнения свойства. Описание общих свойств см. здесь.

Процесс:

  1. Занимать [Boolean] – определяет, требуется ли извлекать из очереди полученные элементы. Возможные значения:

    • галочка отсутствует – элементы не нужно извлекать из очереди. В этом случае статус элементов, полученных по фильтру, не изменится. Значение по умолчанию.
    • галочка установлена – элементы извлекаются, статус изменяется на InProgress. С версии 1.25.11+ блокировка применяется только к элементам, соответствующим фильтру (ранее блокировалась вся очередь).
  2. Игнорировать спецполя [Boolean] – Определяет состав выборки - отсроченные, просроченные и логически удаленные элементы (которые не удаляли из БД). Возможные значения:

    • галочка отсутствует – в выборку попадают только отложенные элементы (с непустым PostponeAt). Значение по умолчанию.
    • галочка установленарасширяет выборку, включая также логически удаленные элементы (DeletedAt). При включении этого параметра рекомендуется отключить свойство Занимать.
  3. Ключ [String] – Натуральный ключ элемента очереди, который указывался при создании элемента (поле Key в модели QueueItem). Пример: "MyKey".

  4. Кол-во [Int32] – Количество элементов, которые необходимо получить. Возвращается список (List) элементов. Если не заполнено или указано 0, возвращается 1 элемент. Пример: 10.

  5. Логика – настраивает логику поиска элемента по тегам. Доступные значения:

    • Or – элемент должен содержать хотя бы один из указанных тегов (по умолчанию).
    • And – у элемента должны быть все перечисленные теги.
  6. Очередь* [String] – название очереди в Оркестраторе. Пример: "Queue1".

  7. Получать метаданные [Boolean] — Определяет, нужно ли получать системные метаданные элемента (дата создания, автор и т.д.). По умолчанию свойство включено.

  8. Получать тэги [Boolean] — Определяет, нужно ли получать теги элемента. Если параметр включен, теги элемента будут извлечены из данных очереди Оркестратора. По умолчанию свойство включено. Рекомендуется отключать, если теги не используются в логике процесса. Это существенно снижает нагрузку на Оркестратор и ускоряет выполнение операции.

  9. Статус – фильтр по статусу элемента очереди. Доступные значения:

    • Любой – статус элемента не важен. Значение по умолчанию.
    • Новый – элемент создан, еще не занят роботом.
    • В процессе – элемент извлечен, но не обработан.
    • Успешно – элемент извлечен из очереди и успешно обработан.
    • Ошибка – элемент извлечен из очереди, но его обработка завершилась с ошибкой общего вида.
    • Ошибка в бизнес-логике – элемент извлечен из очереди, но его обработка завершилась с бизнес-ошибкой.
    • Удалён – элемент помечен как удалённый (логическое удаление). Доступно с версии 1.26.1.
    • Отложен – элемент отложен для обработки до наступления указанного времени (PostponeAt). Доступно с версии 1.26.1
  10. Страница [Int32] – номер страницы очереди Оркестратора, на которой находится искомый элемент. Пример: 1.

  11. Таймаут [Int32] – Лимит времени выполнения операции (мс). Если операция не завершена за указанное время, робот завершает работу с ошибкой. Значение по умолчанию: 30000 (30 секунд).

  12. Только свои [Boolean] – При установке флага будут получены только элементы, добавленные в очередь с идентичной учетной записи (тем же роботом).

  13. Тэги [List<string>] – фильтр по тегам элемента очереди. Пример: new List<string>() { "tag1", "tag2", "tag3" }.

  14. Фильтр [String] – фильтр по метаданным элемента, указывается в виде регулярного выражения для SQL:

    • если Оркестратор установлен с MSSQL SERVER – следует использовать шаблоны с оператором LIKE (но без указания оператора, только шаблон).
    • если Оркестратор установлен с PostgreSQL – доступны функции Regexp. Пример: "%1330\\|15.07.2022%".
  15. Фильтр по значению [String] – фильтр по значению элемента, указывается в виде регулярного выражения. Пример: "\\w+".

Вывод:

  • Элемент [List<LTools.Enterprise.Model.QueueItem>] – название переменной, в которую запишется список элементов очереди, соответствующих заданным условиям фильтра.

Ограничения и особенности

⚠️

Шифрованные очереди

Для очередей с включенным шифрованием (Encrypted = true) запрещено использование фильтра по значению одновременно с параметром Занимать.
В этом случае Оркестратор возвращает ошибку HTTP 409 Conflict.

  • При выборе статуса Отложен возвращаются все записи с непустым PostponeAt, независимо от того, наступило ли время обработки.
  • Поиск удаленных элементов:
    Для получения элементов в статусе Удалён или Отложен (включая удаленные) необходимо:
    • Установить соответствующий статус в фильтре
    • Включить параметр Игнорировать спецполя
    При этом становятся доступны теги и метаданные для элементов в статусе «Удалён», а также элементы в статусе «Отложен», включая логически удаленные.

Только код (Pure code)

Ниже приведен пример использования элемента в процессе с типом Только код (Pure code):

object ret = LTools.Enterprise.OrchestratorApp.PeekQueueByFilter(wf, "queue", id, ".name", LTools.Enterprise.Model.QueueItemStates2.Any, false, 10);

Дополнительно

Last updated on