Appearance
Модуль очереди задач. realweb.api.task
Совместимость
realweb.api v.6
Описание
Модуль предназначен для выполнения тяжело нагруженных или отложенных задач. Позволяет через админку управлять задачами, частотой и временем их запуска, запускать немедленно, журналировать выполнение. Модуль также позволяет из кода сайта запланировать одноразовые задачи на определенное время.
Отличие от предыдущей версии
Отличие данной версии от версии v6.8.* в том, что задачи ставятся в очередь в RabbitMQ и сразу же выполняются (А не ждут своей очереди, как в предыдущей версии). Периодические задачи выполняются также по заданию cron
Задачи делятся на модули и типы.
Администраторская панель
Задачи
Пример интерфейса

Страница со списком актуальных задач. В таблице присутствуют все периодические задачи и одноразовые.
Каждая задача имеет Название (тип), параметры запуска, модуль, дату постановки, дату запуска (или планируемую дату запуска), статус.
Статусы:
- В ожидании
- Выполняется
- Ошибка
- Выполнено
- Отменено
Запущенную задачу можно остановить вручную, если понадобится.
Если задача не завершилась и процесс вылетел, будет соответствующее уведомление и задачу можно будет перезапустить.
По выполненной задаче присутствует информация о затраченном времени и памяти.
Задачи можно фильтровать по типу задач, модулю, статусу, ID.
Присутствует поле для поиска по текстовым данным (по тегам - какими тегами разметить ту или иную задачу решает программист)
Логи
Пример интерфейса

Настройки
Пример интерфейса

Тут потребуется указать путь к интерпретатору php
Практическое использование
Установка одноразовой задачи
php
use Realweb\Api\Module\Task;
$obTask = new Task\Model\Task\Entity();
$obTask
->setName("Отправка заказа в 1С")
->setDescription('')
->setCallback(array("\Realweb\Api\Module\Exchange\Model\Order\Sender", "send"))
->setParams(array(
'id' => $obOrder->getId(),
))
->setModule("site-exchange")
->setType('send_order')
->save();Установка периодической задачи
php
use Realweb\Api\Module\Task;
EventManager::getInstance()->addEventHandler("realweb.api.task", "onBuildTaskList", array('MyClass', 'addTask'));
class MyClass
{
public static function addTask()
{
Task\Model\Helper::getInstance()->addPeriodicTask(
array('\Realweb\Api\Module\Catalog\Model\Price', 'calculate'),
7200,
'realweb.api.module',
'price',
'Пересчет цен'
);
}
}Написание задач
В процессе выполнения задачи в лог можно записывать информацию (message), предупреждения (warning), ошибки (error), размечать задачу тегами, аварийно завершать.
php
use Realweb\Api\Module\Task;
public static function runTask(): void
{
$obTask = Task\Model\Helper::getInstance()->getCurrentTask();
$isError = false;
//...do something
$obTask->addTag($strXmlId);
$obTask->addLogWarning('Предупреждение', $strXmlId,$arData);
$obTask->addLogMessage('Сообщение', $strXmlId,$arData);
if ($isError) {
$obTask->addLogError('Ошибка', $strXmlId,$arData);
throw new \Exception();
}
}