LOCAL
LOCAL - локальный транспорт: код выполняется на сервере SHM.
Этот транспорт удобно использовать когда требуется выполнить шаблон средствами самого SHM. Примеры можно найти здесь.
Управление результатом выполнения
При использовании LOCAL транспорта Вы можете явно указать результат выполнения задачи с помощью метода task.answer():
{{ user.add_bonus( 100, 'Акция' ) }}
{{ task.answer(
status = TASK_SUCCESS
msg = 'Бонусы начислены успешно'
) }}
Создание задач из шаблонов
С помощью spool.add() Вы можете создавать новые задачи для выполнения собственных шаблонов:
{{ result = spool.add(
event = {
name = "UPDATE"
title = "Обновление настроек"
settings = { transport = 'local' }
}
settings = {
template_id = 'my_custom_template'
user_service_id = us.id
}
) }}
Для создания задач для всех пользователей используйте метод job_users с типом Jobs:
Указанный шаблон reminder будет выполнен для всех пользователей.
{{ spool.add(
event = {
kind = "Jobs"
method = "job_users"
name = "Reminder"
title = "connect"
settings = { transport = 'local' }
}
settings = {
template_id = "reminder"
}
prio = 1000
)
}}
Для создания событий в контексте услуги пользователя используйте us.make_custom_event():
{{ result = us.make_custom_event(
name = 'CUSTOM_ACTION'
title = 'Выполнение пользовательского действия'
transport = 'local'
template_id = 'my_template'
) }}
Подробнее о работе с задачами читайте в разделе Работа с задачами.
Очереди
Очереди позволяют группировать задачи и управлять скоростью их выполнения с помощью параметра rate_limit (максимальное число задач в секунду).
При создании задач через job_users очередь создаётся автоматически. Чтобы создать очередь явно и передать её id в задачи, используйте spool_queue.add():
{{ queue_id = spool_queue.add(
name = "Массовая рассылка"
rate_limit = 10
) }}
{{ spool.add(
event = {
kind = "Jobs"
method = "job_users"
name = "Reminder"
title = "connect"
period = 3600
server_gid = 1
}
settings = {
template_id = "reminder"
queue_id = queue_id
}
prio = 1000
status = "PAUSED"
)
}}
Параметры очереди
| Параметр | Описание |
|---|---|
name |
Название очереди |
rate_limit |
Максимальное количество задач в секунду (NULL — без ограничений) |
status |
Статус: active или paused |
Счётчики выполнения
Очередь автоматически отслеживает статистику выполнения задач:
| Поле | Описание |
|---|---|
total_added |
Всего добавлено задач |
cnt_success |
Выполнено успешно |
cnt_fail |
Завершено с ошибкой |
cnt_skipped |
Пропущено |
cnt_stuck |
Зависло |
cnt_pending |
Ожидают выполнения |
finished_at |
Время завершения очереди (заполняется автоматически, когда все задачи обработаны) |