[cronQueue] Очереди задач
Выполнение разнообразных задач кроном.
Зачем?
Есть у меня один проект, с автопереводом отзывов на несколько языков.
Русский, Английский, Китайский, Арабский и Немецкий, это один сайт на 5ти доменах, на каждом домене можно оставить отзыв и он переводится на остальные языки ну и отображается после этого на всех языках.
Изначально перевод осуществлялся в момент сохранения отзыва, с одним языком было не заметно, с двумя долго, с пятью — жесть. Поэтому решил все это дело повесить на крон, да и добавилось других задач: перевести ресурсы, перевести сео и контент на языки, пересчитать баллы за отзывы и тд.
Как работает?
Добавляем задачу
Все задачи хранятся в таблице cronqueue_tasks.
Все функции хранятся в core/components/cronqueue/model/cronqueue/default.php внутри класса functions.
В настройках можно сменить путь к файлу, настройка cronqueue_functions.
Можно запускать сниппеты $cronQueue->add($task, $data, 'snippet');
Ну и добавлять задачи можно из любых плагинов, сниппетов и тд.
Настройка крона
Для ежеминутного запуска, пути на основе modhost.pro
github.com/but1head/cronQueue
Зачем?
Есть у меня один проект, с автопереводом отзывов на несколько языков.
Русский, Английский, Китайский, Арабский и Немецкий, это один сайт на 5ти доменах, на каждом домене можно оставить отзыв и он переводится на остальные языки ну и отображается после этого на всех языках.
Изначально перевод осуществлялся в момент сохранения отзыва, с одним языком было не заметно, с двумя долго, с пятью — жесть. Поэтому решил все это дело повесить на крон, да и добавилось других задач: перевести ресурсы, перевести сео и контент на языки, пересчитать баллы за отзывы и тд.
Как работает?
Добавляем задачу
$cronQueue->add('translateReview', array('ru' => 'Текст отзыва'));Далее крон берет задачу из бд и запускает функцию function translateReview($data). После запуска задача удаляется.Все задачи хранятся в таблице cronqueue_tasks.
Все функции хранятся в core/components/cronqueue/model/cronqueue/default.php внутри класса functions.
В настройках можно сменить путь к файлу, настройка cronqueue_functions.
Можно запускать сниппеты $cronQueue->add($task, $data, 'snippet');
Ну и добавлять задачи можно из любых плагинов, сниппетов и тд.
$cronQueue = $modx->getService('cronqueue','cronQueue', MODX_CORE_PATH . 'components/cronqueue/model/cronqueue/', array());
if(!$cronQueue) die('error load cronQueue');
$cronQueue->add('test', array('test' => 1));Настройка крона
Для ежеминутного запуска, пути на основе modhost.pro
* * * * * php ~/www/core/components/cronqueue/model/cronqueue/worker.phpgithub.com/but1head/cronQueue
Комментарии: 13
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Кто любит бесплатно — можно скачать с гитхаба.
— зачем выбирать namespace? Если я хочу вызвать файл.
— После создания задачи нужно выставить ее тайминг
Мне нужно каждые 5 минут запускать задачу, задачи создаются в момент создания отзыва и тд. Можно было и без компонента обойтись, но решил поделиться, может кому-нибудь понадобится.
Да и переехал на modx с концами.