Дисциплины - Разработка веб-приложений

Продвинутый уровень - Очереди

Очереди queues

При создании веб-приложения у часто возникают такие задачи, выполнение которых занимает слишком много времени, такие как анализ и сохранение загруженного файла CSV, отправка почтовых сообщений и вложений. К счастью, Laravel позволяет легко создавать задания в очереди, которые могут обрабатываться в фоновом режиме. Перемещая трудоемкие задачи в очередь, приложение может реагировать на веб-запросы мгновенно.

В файле конфигурации config/queue.php есть массив конфигурации соединений. Этот параметр определяет подключения к серверным службам очередей, таким как Amazon SQS, Beanstalk или Redis. Однако любое соединение с очередью может иметь несколько «очередей», которые можно рассматривать как разные стопки или стопки заданий, поставленных в очередь.

Обратите внимание, что каждый пример конфигурации соединения в файле конфигурации очереди содержит атрибут очереди. Это очередь по умолчанию, в которую будут отправляться задания при их отправке по данному соединению. Другими словами, если вы отправляете задание без явного указания, в какую очередь оно должно быть отправлено, задание будет помещено в очередь, определенную в атрибуте очереди конфигурации соединения:

use App\Jobs\ProcessPodcast;
 
// This job is sent to the default connection's default queue...
ProcessPodcast::dispatch();
 
// This job is sent to the default connection's "emails" queue...
ProcessPodcast::dispatch()->onQueue('emails');
По умолчанию все поставленные в очередь задания приложения хранятся в каталоге app/Jobs. Если каталог не существует, он будет создан при запуске Artisan-команды make:job:
php artisan make:job ProcessPodcast
После того как вы написали класс задания, вы можете отправить его, используя метод диспетчеризации самого задания. Аргументы, переданные методу диспетчеризации, будут переданы конструктору задания:
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Jobs\ProcessPodcast;
use App\Models\Podcast;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
 
class PodcastController extends Controller
{
    /**
     * Store a new podcast.
     */
    public function store(Request $request): RedirectResponse
    {
        $podcast = Podcast::create(/* ... */);
 
        // ...
 
        ProcessPodcast::dispatch($podcast);
 
        return redirect('/podcasts');
    }
}

Laravel включает команду Artisan, которая запускает обработчик очереди и обрабатывает новые задания по мере их помещения в очередь. Запустить этот процесс можно с помощью Artisan-команды queue:work. Обратите внимание, что после запуска команды queue:work она будет продолжать выполняться до тех пор, пока не будет остановлена вручную или пока вы не закроете терминал:

php artisan queue:work

Laravel предлагает Horizon, красивую панель мониторинга и систему настройки для очередей на базе Redis. Подробнее в официальной документации Laravel Horizon.

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться