[Scheduler] Планирование отложенных задач

Компонент от создателя MODX Марка Хамстра Scheduler — это менеджер отложенных задач.
Предназначен для планирования задач, которые должны быть запущены по расписанию в фоновом режиме.
Импорт и экспорт, отправка писем, уведомления и другие задачи, не требующие выполнения здесь и сейчас.

Позволяет очень просто запустить любой сниппет, процессор или просто PHP файл с вашим скриптом в указанное вами время.



Компонент на самом деле далеко не новый — ему уже 9 лет. Ранее распространялся через магазин modmore.com.
Команда modx.pro его русифицировала и выкладывает для использования в modstore.pro.

Давайте рассмотрим подробнее, что он из себя представляет.



Компонент дает возможность создать задачи, которые можно будет запускать в отложенном режиме по расписанию.
К примеру среди задач могут быть такие:
  • Отправить письмо
  • Сформировать свежую выгрузку
  • Обработать импорт от 1С
  • Сделать бэкап (почему нет)


Задачи умеют запускать
  • Сниппет
  • Процессор
  • Файл со скриптом



Единожды создав задание, его можно запускать многократно, с различными параметрами.
К примеру создав задание на отправку E-mail далее можно отправлять письма просто дергая эту задачу с параметром $email.



Задания выполняются в фоновом режиме, используя CRON. Это означает что, мы можем ставить тяжелые, ресурсоёмкие задачи, которые в обычной ситуации по лимиту времени выполнения PHP скрипта сервер бы остановил.

В наличии журнал выполнения заданий.


Боевой пример.



Имеем стандартный магазин MiniShop2, который при создании заказа сразу же отправляет письма менеджеру и клиенту. Представим, что подключена еще парочка дополнительных плагинов, реализующих отправку заказа в CRM, и, например, посылают клиенту CMS.

Все подобные процедуры происходят последовательно в момент оформления заказа. А в это время клиент сидит перед окном браузера и наблюдает за тем, как висит отправка заказа.

При помощи отложенных задач мы можем разгрузить отправку заказа.
Заранее создадим задания sendEmail, sendSMS, sendCRM
Вместо прямой отправки писем и смс, всего лишь делаем простенькие, дешевые (по нагрузке) операции по планированию запусков.
Другими словами, просто пишем в базу «Через минуту — Отправь CMC по номеру», «Через минуту — Отправь Email» и т.п. На этом все. Ожидающий Клиент получает отправленный заказ почти мгновенно.

В течение одной минуты (можно и раньше) CRON подхватит задачу, выполнит ее, не нагружая ваш браузер ожиданием.

На сладкое.



Предлагаю вашему вниманию анонс давно ожидаемого обновления miniShop2 — встроенную поддержку очередей.
Больше не нужно нагружать заказ кучей непрофильных для него задач. Отправляйте все в планируемое ожидание. Уже скоро вы сможете управлять скоростью оформления заказа, не снижая при этом функциональности.

Где скачать?



Компонент бесплатен, и доступен в отдельном репозитарии от modmore, а также на github в виде исходников

Компонент доступен в modstore.pro/packages/utilities/scheduler
Также перевел всю документацию

Вслед за этим будет выпущено обновление для miniShop2, реализующее очереди.
Справедливости ради, стоит заметить что у нас почти год провисел PR на тему очередей и запланированных заданий от @Михаил в котором он использовал встроенный в MODX функционал.
Но после большого обсуждения — приняли решение использовать более удобный сторонний компонент как зависимость.
Николай Савин
22 декабря 2022, 21:08
modx.pro
1
472
+12
Поблагодарить автора Отправить деньги

Комментарии: 4

Дмитрий Касаткин
23 декабря 2022, 19:34
+1
Спасибо за обзор, отличный компонент!

Если кому-то, как и мне, не терпится документацию глянуть, чтобы не искать, она → тут по ссылке на docs.modmore

Задания добавляются в несколько строчек кода буквально. Красота!
    Алексей Смирнов
    24 декабря 2022, 21:51
    0
    Подскажите, эта штука через крон работает или через запросы на сайт?
      Николай Савин
      25 декабря 2022, 09:06
      0
      Scheduler работает через крон.
      То есть раз в минуту он запрашивает наличие задач в очереди и если такая есть, запускает задачу в работу.
      Таким образом если условный интернет-магазин ставит в очередь несколько задач
      • Письмо менеджеру
      • Письмо Клиенту
      • Заказ в CRM
      • СМС клиенту
      То эти задачи будут выполнены в течение 4 минут по очереди.

      Но можно конечно делать и по другому. Ставить в задание не одну простую задачу, а пул задач. Что-то вроде — выполнить все процедуры касающиеся Заказа.

      А еще @Дима Сайт показывал как можно дергать CRON чаще, например каждые 10 секунд. Но у меня пока не получилось повторить (не особо и старался).
      R2m0x94 (Vasily)
      31 декабря 2022, 16:11
      0
      А если скрипт отрабатывает дольше по времени, какой вариант настроен по умолчанию?
      а) Скрипт блокируется и доходит до конца, но как только скрипт отработал по окончанию вновь запускается не создавая нагрузку
      б) Скрипт запускается независимо от того запущен или нет

      Предусмотрено в компоненте остановка скрипта, если отладки?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4