Учебное пособие по очередям Laravel с примерами с нуля является ведущей темой сегодня. Очереди Laravel 5.5 предоставляют унифицированный API для множества различных бэкэндов очередей, таких как Beanstalk, Amazon SQS, Redis или даже для реляционной базы данных. Очереди позволяют отложить обработку трудоемкой задачи, например отправки электронного письма. Отсрочка выполнения этих трудоемких задач значительно ускоряет веб-запросы к вашему приложению.
Файл конфигурации очереди хранится в. config/queue.php
В этом файле вы найдете конфигурации подключения для каждого из драйверов очереди, включенных в структуру, которая состоит из базы данных, Beanstalkd, Amazon SQS, Redis и синхронного драйвера, который будет выполнять задания немедленно (для локального использования). Также включен драйвер очереди null , который просто отбрасывает задания из очереди.
Пример отправки электронной почты очереди Laravel
Отправка электронной почты — это трудоемкая задача, поэтому мы создадим задание, единственная задача которого — отправить электронное письмо пользователю в фоновом режиме. Итак, приступим.
Шаг 1. Настройте Laravel
Установите его с помощью следующей команды.
composer create-project laravel/laravel --prefer-dist emailqueue
Теперь в файле .env настройте базу данных и почтовый сервер.
Для отправки электронной почты я использовал https://mailtrap.io. Так что, если вы хотите это использовать, перейдите на веб-сайт и зарегистрируйтесь, и вы увидите свое имя пользователя и пароль, возьмите его и вставьте в файл .env , и все готово.
Кроме того, нам нужно изменить драйвер очереди для базы данных. По умолчанию laravel использует
APP_NAME = LaravelAPP_ENV = localAPP_KEY = base64: N/+ b/PAQXgtG8OiYu3TKyudhicgYsGYfb551yrqkjmQ = APP_DEBUG_Http://LugNoG_Mys_DeBUG = http://db_Lug_Host: = 127.0.0.1DB_PORT = 3306DB_DATABASE = queueDB_USERNAME = rootDB_PASSWORD = BROADCAST_DRIVER = logCACHE_DRIVER = fileSESSION_DRIVER = fileSESSION_LIFETIME = 120QUEUE_DRIVER = databaseREDIS_HOST = 127.0.0.1REDIS_PASSWORD = nullREDIS_PORT = 6379MAIL_DRIVER = smtpMAIL_HOST = smtp.mailtrap.ioMAIL_PORT = 2525MAIL_USERNAME = MAIL_PASSWORD = MAIL_ENCRYPTION = tlsPUSHER_APP_ID = PUSHER_APP_KEY = PUSHER_APP_SECRET =
Шаг 2. Создайте маршрут для отправки почты.
Мы создадим один маршрут для отправки электронное письмо, а также создайте один контроллер с именем
php artisan make: controller EmailController
В маршрутах >> файл web.php , добавьте следующий код.
Route :: get ('email', 'EmailController @ sendEmail');
Хорошо, теперь нам нужно создать один почтовый класс, поэтому в терминале введите следующую команду.
php artisan make: mail SendMailable
Итак, он создаст этот файл внутри App Mail SendMailable.php.
Теперь напишите функцию sendMail внутри файла MailController.php .
phpnamespace App Http Controllers; используйте Illuminate Http Request; используйте Illuminate Support Facades Mail; используйте App Mail SendMailable; класс EmailController расширяет Controller {общедоступная функция sendEmail () {Mail :: to ('mail @ appdividend .com ') -> отправить (новый SendMailable ()); echo 'электронное письмо отправлено'; }}
Кроме того, файл out SendMailable.php выглядит следующим образом.
phpnamespace App Mail; используйте Illuminate Bus Queueable; используйте Illuminate Mail Mailable; используйте Illuminate Queue SerializesModels; используйте Illuminate Contracts Queue ShouldQueue; класс SendMailable расширяет Mailable {используйте Queueable, SerializesModels; /** * Создать новый экземпляр сообщения. * * @return void */public function __construct () {//}/** * Создайте сообщение. * * @return $ this */public function build () {return $ this-> view ('добро пожаловать'); }}
Теперь запустите сервер с помощью следующей команды.
php artisan serve
Переключитесь в браузер и нажмите этот URL : Http://localhost: 8000/email
Вы увидите, что есть задержка, и тогда мы сможем получить почту. Итак, вот решение, и это
Шаг 3. Настройте очередь.
Мы можем использовать очередь с базой данных, Redis и другими драйверами, как указано в Laravel 5.5 Queues.
Мы будем использовать базу данных, поэтому нам нужно создайте миграцию для таблицы Jobs.
php artisan queue: table
Он создаст миграцию, а затем нам нужно будет перенести базу данных.
php artisan migrate
Будет создана таблица jobs в базе данных.
Шаг 4 : Создать задание
Теперь нам нужно будет создать задание, целью которого является отправка фактического электронного письма пользователю.
php artisan make : job SendEmailJob
Теперь функция отправки электронной почты будет находиться в файле задания. Итак, этот файл задания выглядит так.
Phpnamespace App Jobs; используйте Illuminate Bus Queueable; используйте Illuminate Queue SerializesModels; используйте Illuminate Queue InteractsWithQueue; используйте Illuminate Contracts Queue ShouldQueue; используйте Illuminate Foundation Bus Dispatchable; используйте Illuminate Support Facades Mail; используйте App Mail SendMailable; класс SendEmailJob реализует ShouldQueue {используйте Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Создаем новый экземпляр задания. * * @return void */public function __construct () {//}/** * Выполнить задание. * * @return void */дескриптор публичной функции () {Mail :: to ('mail@appdividend.com ') -> send (new SendMailable ()); }}
В файле EmailController.php нам нужно будет запустить это задание..
Итак, нам нужно отправить вновь созданное задание из EmailController. Итак этот код будет выглядеть так.
phpnamespace App Http Controllers; использовать Illuminate Http Request; использовать App Jobs SendEmailJob; класс EmailController расширяет Controller {общедоступная функция sendEmail () { отправка (новый SendEmailJob ()); echo 'электронное письмо отправлено'; }}
Теперь снова нажмите этот адрес электронной почты.
Тем не менее, задержка есть; мы только что переместили логику в файл задания. Нам нужно отправить почту в фоновом режиме. Поэтому нам нужно отложить нашу очередь .
общедоступная функция sendEmail () {$ emailJob = (new SendEmailJob ()) -> delay (Carbon :: now ( ) -> addSeconds (3)); отправка ($ emailJob); echo 'email sent';}
Теперь снова нажмите URL.
На этот раз задержка всего 3 секунды, или мы можем сказать, что задержки нет, но подождите , если переключиться на mailtrap , то почты тоже нет. Итак, как мы можем отправлять и настоящую почту.
Зайдите в базу данных и посмотрите таблицу jobs . Есть одна запись о вакансии. Это означает, что процесс этой работы еще не запущен. Итак, в Laravel есть концепция под названием Queue Worker. Нам нужно запустить этого Queue Worker .
Переключитесь на терминал и введите следующую команду, чтобы запустить Queue Worker.
php artisan queue: work
В терминале это будет так.
[2017-12-21 13:58:14] Обработка : App Jobs SendEmailJob [2017-12-21 13:58:19] Обработано: App Jobs SendEmailJob
Теперь перейдите в почтовую ловушку, и да, мы увидим, что письмо было отправлено.
Снова обновите этот URL.
Он скажет, что электронное письмо отправлено, а через 5-6 секунд письмо также отправлено в почтовую ловушку.
Мы можем создать столько заданий, сколько захотим, но убедитесь, что работник очереди запущен и все конфигурации установлены правильно.
Бинго, наш Учебник по очередям Laravel Окончено.