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