[Scheduler] Планирование отложенных задач
Компонент от создателя MODX Марка Хамстра Scheduler — это менеджер отложенных задач.
Предназначен для планирования задач, которые должны быть запущены по расписанию в фоновом режиме.
Импорт и экспорт, отправка писем, уведомления и другие задачи, не требующие выполнения здесь и сейчас.
Позволяет очень просто запустить любой сниппет, процессор или просто PHP файл с вашим скриптом в указанное вами время.
Компонент на самом деле далеко не новый — ему уже 9 лет. Ранее распространялся через магазин modmore.com.
Команда modx.pro его русифицировала и выкладывает для использования в modstore.pro.
Компонент дает возможность создать задачи, которые можно будет запускать в отложенном режиме по расписанию.
К примеру среди задач могут быть такие:
Задачи умеют запускать
Единожды создав задание, его можно запускать многократно, с различными параметрами.
К примеру создав задание на отправку 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 функционал.
Но после большого обсуждения — приняли решение использовать более удобный сторонний компонент как зависимость.
Предназначен для планирования задач, которые должны быть запущены по расписанию в фоновом режиме.
Импорт и экспорт, отправка писем, уведомления и другие задачи, не требующие выполнения здесь и сейчас.
Позволяет очень просто запустить любой сниппет, процессор или просто 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 функционал.
Но после большого обсуждения — приняли решение использовать более удобный сторонний компонент как зависимость.
Поблагодарить автора
Отправить деньги
Комментарии: 4
Спасибо за обзор, отличный компонент!
Если кому-то, как и мне, не терпится документацию глянуть, чтобы не искать, она → тут по ссылке на docs.modmore
Задания добавляются в несколько строчек кода буквально. Красота!
Если кому-то, как и мне, не терпится документацию глянуть, чтобы не искать, она → тут по ссылке на docs.modmore
Задания добавляются в несколько строчек кода буквально. Красота!
Подскажите, эта штука через крон работает или через запросы на сайт?
- Письмо менеджеру
- Письмо Клиенту
- Заказ в CRM
- СМС клиенту
Scheduler работает через крон.
То есть раз в минуту он запрашивает наличие задач в очереди и если такая есть, запускает задачу в работу.
Таким образом если условный интернет-магазин ставит в очередь несколько задач
Но можно конечно делать и по другому. Ставить в задание не одну простую задачу, а пул задач. Что-то вроде — выполнить все процедуры касающиеся Заказа.
А еще @Дима Сайт показывал как можно дергать CRON чаще, например каждые 10 секунд. Но у меня пока не получилось повторить (не особо и старался).
То есть раз в минуту он запрашивает наличие задач в очереди и если такая есть, запускает задачу в работу.
Таким образом если условный интернет-магазин ставит в очередь несколько задач
Но можно конечно делать и по другому. Ставить в задание не одну простую задачу, а пул задач. Что-то вроде — выполнить все процедуры касающиеся Заказа.
А еще @Дима Сайт показывал как можно дергать CRON чаще, например каждые 10 секунд. Но у меня пока не получилось повторить (не особо и старался).
А если скрипт отрабатывает дольше по времени, какой вариант настроен по умолчанию?
а) Скрипт блокируется и доходит до конца, но как только скрипт отработал по окончанию вновь запускается не создавая нагрузку
б) Скрипт запускается независимо от того запущен или нет
Предусмотрено в компоненте остановка скрипта, если отладки?
а) Скрипт блокируется и доходит до конца, но как только скрипт отработал по окончанию вновь запускается не создавая нагрузку
б) Скрипт запускается независимо от того запущен или нет
Предусмотрено в компоненте остановка скрипта, если отладки?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.