Skip to content

Модуль очереди задач. realweb.api.task

Совместимость

realweb.api v.6

Зависимость

realweb.api v.6

realweb.api.config

realweb.api.rabbitmq

Описание

Модуль предназначен для выполнения тяжело нагруженных или отложенных задач. Позволяет через админку управлять задачами, частотой и временем их запуска, запускать немедленно, журналировать выполнение. Модуль также позволяет из кода сайта запланировать одноразовые задачи на определенное время.

Отличие от предыдущей версии

Отличие данной версии от версии 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();
    }

}

Репозиторий

Репозиторий модуля