Может войдёшь?
Черновики Написать статью Профиль

Обновление обработчиков очереди в Laravel 5.3

перевод новое в 5.3

Очереди — один из тех инструментов Laravel, о котором все знают, но мало кто понимает их полностью. И это не удивительно, ведь многие впервые сталкиваются с очередями именно в Laravel, а они не так уж и просты, на самом деле.

К счастью, в Laravel 5.3 произошло совсем немного внешних изменений в работе с очередями.

Демон по умолчанию

Самое большое изменение в том, что команда, которой вы раньше пользовались для «прослушивания» задач в очереди:

shphp artisan queue:listen

...больше не является способом по умолчанию. Теперь способом по умолчанию является запуск shqueue:work как демона:

shphp artisan queue:work

Раньше это можно было сделать при помощи запуска shphp artisan queue:work --daemon, но теперь вам не надо передавать --daemon (наоборот, для работы с одной задачей передайте --once). Laravel рекомендует использовать по умолчанию shqueue:work (стиль демона) вместо shqueue:listen.

В чём разница?

Команда shphp artisan queue:listen слушает вашу очередь и каждый раз запускает всё приложение для обработки каждой задачи из очереди. Это медленнее, зато не требует перезагрузки обработчика при каждом изменении кода.

Команда shphp artisan queue:work сохраняет приложение запущенным между задачами, что делает его быстрее и легче, но вам необходимо перезапускать слушателя при каждом изменении кода. Лучший способ для этого — выполнять shphp artisan queue:restart при каждом развёртывании.

Супервизор

Рекомендуется запускать процесс супервизора на ваших Linux-машинах для слежения за слушателем и его перезапуска, если он остановится. В документации появился раздел о правильной настройке супервизора.

Если коротко, то вы устанавливаете его с помощью shapt-get, настраиваете его в файле /etc/supervisor/conf.d, и включаете перезапуск обработчика очереди, если он остановится. Вы можете задать даже количество обработчиков очереди для запуска в заданное время.

Под капотом

Последнее изменение — одно из самых прозрачных для нас, разработчиков: в новой инфраструктуре очередей у основного обработчика другая модель управления каждой задачей. Она сложнее, зато теперь у обработчика намного больше возможностей для контроля длительных задач в очереди и задач со сбоями в работе. А также новая система поддерживает pcntl_async_signals для PHP 7.1.

Напомню, вы можете управлять длительными задачами с помощью --timeout и retry_after; с помощью --timeout вы можете задать отведённое задаче время, и если процесс задачи превысит его, то будет «убит» своим родительским процессом — процессом обработчика очереди:

shphp artisan queue:work --timeout=90

Вы можете использовать --timeout совместно с retry_after (это настройка в конфигурационном файле очереди). retry_after задаёт то, как долго обработчик должен ждать перед тем, как решит, что задача провалена и должна быть помещена в очередь заново для повторной попытки. Как сказано в документации, не забудьте сделать retry_after хотя бы на несколько секунд больше, чем --timeout, чтобы избежать наложения нескольких копий одной задачи в очереди.

Заключение

Вот теперь всё! Всё описанное просто, но я считаю, что это делает всю настройку немного легче и более понятнее.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.