Задать вопрос
inlanger
@inlanger
Django программист

Простейшая очередь задач на PHP?

Посоветуйте простейшую очередь задач на PHP вроде python-rq для языка Python. Я начал смотреть популярные решения вроде Gearman, но по сравнению с приведенным мной аналогом это какой-то монстр. На Python я могу перед функции указать декоратор @job('low', conn=my_redis_conn, timeout=5) и вся моя функция просто выполнится в фоне и веб-приложение не будет ждать ее выполнения. А на том же Gearman нужно писать гору лишнего кода. Я пробовал гуглить, но по теме выдаются еще более огромные zeromq и прочие mq, на которых ну никак не решить задачу в пару строк кода.
  • Вопрос задан
  • 14916 просмотров
Подписаться 7 Оценить Комментировать
Ответ пользователя Albert К ответам на вопрос (8)
@greezly2020
Потратитель времени на ответы в Habr. =)
Посмотрите в строну очень просто и легковесного как Gearman брокер сообщений beanstalk. Beanstalk пользуется большей популярностью чем Gearman. Впервые она была сделана для Facebook.

Репозиторий:
https://beanstalkd.github.io/.

Для работы на PHP установите библиотеку через Composer:
https://packagist.org/packages/pda/pheanstalk
PHP клиент часто обновляется и дорабатывается в отличии от Gearman, расширение которого устанавливается через PEAR.

Читайте официальную документацию!

Мне нравится Gearman. Например в отличии от Gearman который просто раздает задачи, у beanstalkd имеется API, где в коде воркера можно отправить команду на удаляете выполненной задачи из очереди.
Я например пользуюсь в одном из проектов - Gearman. И если задача из очереди выполнена воркером неправильно или не выполнена вообще, я помещаю ее снова в очередь с высоким приоритетом. Если не выполняется второй раз. То добавляю ее в базу данных как ошибка.

Подробнее про Beanstalk.
1. https://badcode.ru/chto-takoie-php-ochieried-zadach/.
2. https://badcode.ru/ochieriedi-v-proghrammirovanii-...
Та же есть статья о супервизоре.

Также Redis используют в качестве очереди сообщений если хотите свой брокер сделать под себя. Основное назначение Redis No-SQL база данных.
Ответ написан
Комментировать