Очереди - один из тех инструментов Laravel, о котором все знают, но мало кто понимает их полностью. И это не удивительно, ведь многие впервые сталкиваются с очередями именно в Laravel, а они не так уж и просты, на самом деле. К счастью, в Laravel 5.3 произошло совсем немного внешних изменений в работе с очередями. {{CUT}} == Демон по умолчанию == Самое большое изменение в том, что команда, которой вы раньше пользовались для "прослушивания" задач в очереди: %%(sh) php artisan queue:listen %% ...больше не является способом по умолчанию. Теперь способом по умолчанию является запуск %%(sh)queue:work%% как демона: %%(sh) php artisan queue:work %% Раньше это можно было сделать при помощи запуска %%(sh)php artisan queue:work --daemon%%, но теперь вам не надо передавать %%(t)--daemon%% (наоборот, для работы с одной задачей передайте %%(t)--once%%). Laravel рекомендует использовать по умолчанию %%(sh)queue:work%% (стиль демона) вместо %%(sh)queue:listen%%. == В чём разница? == Команда %%(sh)php artisan queue:listen%% слушает вашу очередь и каждый раз запускает всё приложение для обработки каждой задачи из очереди. Это медленнее, зато не требует перезагрузки обработчика при каждом изменении кода. Команда %%(sh)php artisan queue:work%% сохраняет приложение запущенным между задачами, что делает его быстрее и легче, но вам необходимо перезапускать слушателя при каждом изменении кода. Лучший способ для этого - выполнять %%(sh)php artisan queue:restart%% при каждом развёртывании. == Супервизор == Рекомендуется запускать процесс супервизора на ваших Linux-машинах для слежения за слушателем и его перезапуска, если он остановится. В документации появился раздел о правильной ((https://laravel.com/docs/5.3/queues#supervisor-configuration настройке супервизора)). Если коротко, то вы устанавливаете его с помощью %%(sh)apt-get%%, настраиваете его в файле %%(t)/etc/supervisor/conf.d%%, и включаете перезапуск обработчика очереди, если он остановится. Вы можете задать даже количество обработчиков очереди для запуска в заданное время. == Под капотом == Последнее изменение - одно из самых прозрачных для нас, разработчиков: в новой инфраструктуре очередей у основного обработчика другая модель управления каждой задачей. Она сложнее, зато теперь у обработчика намного больше возможностей для контроля длительных задач в очереди и задач со сбоями в работе. А также новая система поддерживает %%(t)pcntl_async_signals%% для PHP 7.1. Напомню, вы можете управлять длительными задачами с помощью %%(t)--timeout%% и %%(t)retry_after%%; с помощью %%(t)--timeout%% вы можете задать отведённое задаче время, и если процесс задачи превысит его, то будет "убит" своим родительским процессом - процессом обработчика очереди: %%(sh) php artisan queue:work --timeout=90 %% Вы можете использовать %%(t)--timeout%% совместно с %%(t)retry_after%% (это настройка в конфигурационном файле очереди). %%(t)retry_after%% задаёт то, как долго обработчик должен ждать перед тем, как решит, что задача провалена и должна быть помещена в очередь заново для повторной попытки. Как сказано в документации, не забудьте сделать %%(t)retry_after%% хотя бы на несколько секунд больше, чем %%(t)--timeout%%, чтобы избежать наложения нескольких копий одной задачи в очереди. == Заключение == Вот теперь всё! Всё описанное просто, но я считаю, что это делает всю настройку немного легче и более понятнее.