Очередь сценариев
Когда один сценарий запускается несколько раз за короткий промежуток времени возникает нагрузка на сервисы API и базу данных Бипиума. Если сценарий совершает много операций с данными, повышенная нагрузка приведет к серверной ошибке из-за большого числа запросов к API (429, Too Many Requests). Чтобы избежать этого, используйте очередь сценариев.
Очередь сценариев позволяет:
- Последовательно запускать одинаковые сценарии Следующий сценарий не начнет выполнение пока предыдущий не завершит работу.
- Параллельно запускать разные сценарии Разные сценарии будут запущены независимо друг от друга.
- Повторно запускать сценарии завершенные с ошибкой Если сценарий завершился с ошибкой, очередь попытается выполнить его еще раз. Например, когда сценарий обращается к внешнему сервису который на данный момент недоступен.
.jpg?alt=media&token=0c21f3be-349f-46d9-8f90-886e218be3c9)
- В каталоге «Очередь» фиксируются записи со сценариями и их входными данными.
- Сценарий обработки очереди реагирует на добавление записи в каталог: запускает указанный в записи сценарий с его параметрами запуска.
- При успешном завершении сценарий фиксирует это статусом и больше не попадает в очередь.
- При завершении с ошибкой, сценарий очереди запустит его повторно. Количество попыток можно задать параметром в сценарии обработки очереди.
Создайте каталог «Очередь». При создании каталога нужно добавить и настроить поля следующим образом. Создавать поля нужно в том же порядке, не нарушая последовательности их id.


- Выполнить (Секция)
- Сценарий (связанный каталог) Описание: Сценарий, который будет выполнен. Связанный кат алог: Сценарии. Настройки: Обязательное поле.
- Параметры запуска (Текст) Описание: Свойства и их значения, к которым может обращаться запущенный сценарий. Формат вводимых данных: JSON-объект. Настройки: Многострочный текст, обязательное поле.
- Исполнение (Секция)
- Статус (Статус) Описание: Текущее состояние сценария. Значения: Запланировано, Исполнение, Готово, Ошибка. Настройки: Обязательное поле, по умолчанию: первый элемент.
- Код процесса (Текст) Описание: Код запущенного экземпляра сценария. Настройки: Текст.
- Дата запуска (Дата) Описание: Дата последнего запуска сценария. Настройки: Дата со временем.
- Дата завершения (Дата) Описание: Дата последнего завершения сценария (с ошибкой или успешно). Настройки: Дата со временем.
- Кол-во запусков (Число) Описание: Количество запусков сценария. Настройки: Минимальное значение — 0.
- Ошибки (Текст) Описание: Описание ошибки сценария. Настройки: Многострочный текст.
- Служебная информация (Секция)
- Создано (Дата) Описание: Дата создания записи. Настройки: Со временем, по умолчанию: текущее время, редактируемое только через API.
Пример заполненной карточки в каталоге «Очередь»:

В каталоге «События» создайте новую запись и заполните ее следующим образом:

Сценарий обработки очереди выглядит следующим образом:

В зависимости от типа события, происходит следующее:
- Если тип события «Уведомление о создании записи», сценарий задает количество запусков как 0. Далее сценарий проверяет есть ли другие записи в очереди с тем же сценарием, которые должны выполниться раньше. Если таких сценариев нет – запускает в работу сценарий из созданной записи.
- Если тип события «Уведомление об изменении записи», то логика следующая: Если сценарий в измененной записи завершился с ошибкой, сценарий очереди запускает его еще раз. Максимальное число повторных запусков - 5. Если сценарий в измененной записи завершился успешно - сценарий очереди берет из очереди следующую запись и запускает сценарий в ней.
Сценарий обработки очереди работает по статусам записей в очереди, но не проставляет их. Для корректной работы очереди вам нужно изменить статус записи очереди самостоятельно, из запускаемого в записи очереди сценария. Для этого в каждый запускаемый очередью сценарий передаются следующие параметры запуска:
- queueRecordId — id записи в каталоге «Очередь», из которой вызывается сценарий.
- queueStartCount — Число запусков сценария в этой записи очереди.
- payload — произвольные входные данные для сценария в формате JSON. Передаются из поля «Параметры запуска» этой записи очереди.
Ко всем описанным выше параметрам запуска есть доступ из вызванного очередью сценария.
Сценарий в записи очереди может быть любым. Единственное ограничение - необходимость простановки из него статуса и числа запусков в запись очереди, из которой он был запущен.
Запись очереди необходимо изменять:
- В начале работы сценария (после компонента «Начало процесса»). Необходимо проставить статус «Исполняется» и увеличить число запусков на 1 в записи очереди. Здесь же можно проставить «Дату запуска» и «Код процесса», но эти поля не обязательны.
- В конце работы сценария (перед компонентом «Конец процесса»). Необходимо проставить статус «Готово». Здесь же можно проставить «Дату завершения».
- Во всех компонентах, в которых возможно возникновение ошибки. В качестве неудачной ветки можно использовать выход из компоненты по ошибке или же прописать собственную логику, приводящую к ошибке. Необходимо проставить статус «Ошибка» и увеличить количество запусков на 1 в записи очереди.
Пример простого сценария, обращающегося к стороннему сервису в записи очереди:

Пример заполнения компонентов, назначающих статусы исполнения в запись очереди:
- Компонент «Статус — исполняется»:

- Компонент «Выкидываем ошибку»:

- Компонент «Статус — завершен»:

В каталоге «Сценарии» создайте тестовый сценарий для проверки очереди. Для большей наглядности используйте компонент «Таймер», чтобы увеличить время работы сценария. Пример сценария:

Компоненты «Статус — исполняется» и «Статус — завершен» заполните согласно скриншотам выше.
В каталоге «Очередь» создайте запись с созданным ранее тестовым сценарием. В качестве входных данных укажите произвольный JSON, например - {}. Пример заполнения:

После создания записи ее статус перейдет в состояние «Исполнение»:

Во время исполнения сценария создайте еще одну запись в каталоге «Очередь» с тем же сценарием. Созданная запись останется в статусе «Запланировано»:

Дождитесь окончания выполнения сценария в первой записи очереди. После окончания выполнения сценария, статус в первой записи очереди изменится на «Готово»:

В это же время начнет выполняться сценарий во второй записи очереди:
