Очереди в Laravel. Шаг за шагом на примере.

Иногда отдельные процессы требуют много времени для выполнения, например, отправка электронной почты, платежный шлюз и т.п. Когда вы отправляете электронную почту для проверки, это занимает время. Если вы не хотите заставлять пользователя ждать, то необходимо использовать очереди. Это позволит сделать ваш сервис быстрым для пользователя.

В статье ниже мы разберем как сделать очередь на базе данных для отправки почты. Это очень просто. Поехали!

Для начала установил новый Laravel 8

composer create-project --prefer-dist laravel/laravel blog

Затем создадим новое письмо

php artisan make:mail SendEmailTest

После выполнения кода выше, Laravel создаст новый файл письма app/Mail/SendEmailTest.php

<?php
  
namespace App\Mail;
  
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
  
class SendEmailTest extends Mailable
{
    use Queueable, SerializesModels;
  
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
   
    }
  
    /**
     * Build the message.
     *
     * @return $this
     */
     publicfunction build()
    {
        return $this->view('emails.test');
    }
}

Теперь нам потребуется создать новое представление для этого письма resources/views/emails/test.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Как отправлять письма Laravel 8, используя очереди? - maxyc.ru</title>
</head>
<body>
   
<center>
<h2 style="padding: 23px;background: #b3deb8a1;border-bottom: 6px green solid;">
    <a href="https://maxyc.ru">Посетите наш сайт: maxyc.ru</a>
</h2>
</center>
  
<p>Hi, Sir</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  
<strong>Thank you Sir. :)</strong>
  
</body>
</html>

Теперь нам необходимо настроить отправку почты

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xyz@gmail.com
MAIL_PASSWORD=123456
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xyz@gmail.com
MAIL_FROM_NAME="${APP_NAME}"

Следующим шагом мы будет настраивать уже сами очереди. Для начала в файле .env укажем в качестве драйвера очередей – базу даных

QUEUE_CONNECTION=database

Затем нам необходимо сгенерировать миграцию и создать таблицы для очередей

php artisan queue:table
php artisan migrate

Теперь, создаем обработчик задач очереди

php artisan make:job SendEmailJob

Данная команда создаст файл app/Jobs/SendEmailJob.php. Давайте наполним его следующим кодом

<?php
  
namespace App\Jobs;
  
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Mail\SendEmailTest;
use Mail;
  
class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  
    protected $details;
  
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($details)
    {
        $this->details = $details;
    }
  
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $email = new SendEmailTest();
        Mail::to($this->details['email'])->send($email);
    }
}

Давайте протестируем работу очередей. В первую очередь создадим маршрут, в котором будет создаваться новая задача для очереди

routes/web.php

Route::get('email-test', function(){
  
    $details['email'] = 'your_email@gmail.com';
  
    dispatch(new App\Jobs\SendEmailJob($details));
  
    dd('done');
});

Ок, маршрут создан. Запустим слушателя очередей используя следующую команду

php artisan queue:listen

Запустим сервер командой

php artisan serve

Переходим по ссылке

http://localhost:8000/email-test

В командной строке вы можете увидеть следующее

Рейтинг
( Пока оценок нет )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.