Учебное пособие по очередям Laravel с примерами с нуля

Учебное пособие по очередям 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 Окончено.

Оцените статью
nanomode.ru
Добавить комментарий