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();
    }

}

Репозиторий ​

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