Эмуляция очередей при помощи cron на WordPress сайте Leave a comment

Попытки оптимизации и автоматизации работы вашего сайта на движке WordPress могут вас привести к тому что нужно будет перевести часть «тяжёлого» функционала в «фон», что бы не обременять ваших посетителей ожиданиями отклика сайта или выполнения каких либо действий на странице. Собственно профессиональные и высоко нагруженные проекты используются для таких случаев серверы очередей (RabbitMQ и д.р).Но если хочется более простой реализации «очередей» и у себя на хостинге — можно попробовать достаточно интересное решение которое эмулирует очередь на WordPress при помощи крон. При этом постановка в очередь, прослушивание очереди и отработка задания в очереди происходит по аналогии с другими более крупными решениями реализаций очередей.

И так, для чего может пригодится очередь заданий (выдуманные примеры взятые для понимания):

1. Добавление комментария с проверкой его на спам + отправка уведомления + другие операции

После нажатия на кнопку отправить комментарий. Ваш WordPress по мимо его записи в базу может делать:

  • Запрос через сеть к сервисам по проверки комментария на спам (сетевые операции могут занимать ощутимое время выполнения)
  • Запрос к smtp для отправки сообщения ( в этом случае будет уходить время на соединение и авторизацию на smtp сервере)
  • Запрос к телеграм боту, который вас уведомит о новом событии у вас на сайте (так же это сетевой запрос)

И пока вся эта цепочка выполняется — ваш посетитель ждёт, пока его комментарий отправится.

2. Обработка прайса или файла который содержит информацию о товарах для вашего WooCommerce

3. Какие либо сервисные операции или одноразовые задачи

 

Ниже небольшой класс для организации очередей

 

Пример добавления задания в очередь:

При добавлении в очередь — первый параметр это название очереди который мы потом будет ловить в обработчике.

Далее идёт массив параметров, в массив параметров вы добавляете всё что вам может потребоваться в обработчике очереди

Последний параметр — это время в секундах через которое будет проверенно это задание.

 

Пример того как забрать задание из очереди и выполнить его:

Обработка очереди начинается с создание объекта класса.

Затем запускаем обработчик подписки на очередь в который нужно передать два параметра:

1. Имя очереди, этот параметры мы обозначили при добавлении в очередь

2. Функция которая принимает массив параметров и выполняет каких либо действий. В примере это отправка сообщения на почту.

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

Технически это выглядит так:

У вас на сайте создаётся одноразовое крон задание при создании очереди, которое будет выполнено через указанное время секунд. Дальше это задание протухает. Если вам нужно повторно запустить это задание(например вы обрабатывает огромный csv файл) — тогда в обработчике очереди по завершению каких-либо действий создайте новое задание с тем же именем и параметрами.

Особенность: обработка очереди должна происходить только в момент работы cron — т.е конда константа DOING_CRON будет true, а это происходит при запуске файла wp-cron.php

 

Приведённые примеры являются лишь примерами. Класс и его реализацию вы можете использовать по вашим требованиям. Делитесь вашими заметками в комментариях к записи.

 

Класс оригинал https://github.com/withinboredom/wp-queue

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *