Pada artikel ini, kita akan belajar bagaimana cara mengirim email menggunakan queue di laravel 10. Seringkali kita dapat melihat banyak proses yang membutuhkan waktu lebih lama untuk dimuat seperti pengiriman email massal, pengiriman faktur, dll.
Setiap kali Anda mengirim email untuk verifikasi maka akan memakan waktu untuk mengirim email karena itu adalah layanan. Anda dapat menggunakan antrian jika Anda tidak ingin menunggu pengguna untuk mengirim email atau proses lain saat memuat proses sisi server.
Pada contoh pengiriman email menggunakan queue di laravel 10 ini kita akan menyiapkan mailtrap untuk mengirim email. Antrian Laravel menyediakan API antrian terpadu di berbagai backend antrian yang berbeda, seperti Amazon SQL, Redis, atau bahkan basis data relasional.
Jadi, mari kita lihat bagaimana cara kerja queue di laravel 10, mengirim email menggunakan queue di laravel 10, dan cara mengirim email di laravel 10.
Baca Juga
Install Laravel 10
Pada langkah ini, kita akan menginstal aplikasi laravel 10 menggunakan perintah composer.
composer create-project --prefer-dist laravel/laravel laravel_10_send_mail
Buat Pengaturan Email
Sekarang, kita akan menjalankan perintah di bawah ini di terminal dan membuat email.
php artisan make:mail SendEmailQueueDemo
Sekarang, Anda akan menemukan folder Mail baru di direktori app dengan nama file SendEmailQueueDemo.php. Jadi, tambahkan kode di bawah ini ke file ini.
app/Mail/SendEmailQueueDemo.php
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; class SendEmailQueueDemo extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. */ public function __construct() { } /** * Get the message envelope. */ public function envelope(): Envelope { return new Envelope( subject: 'How To Send E-mail Using Queue In laravel 10', ); } /** * Get the message content definition. */ public function content(): Content { return new Content( view: 'email.demo', ); } /** * Get the attachments for the message. * * @return array */ public function attachments(): array { return []; } }
Setelah itu, kita perlu membuat tampilan email menggunakan file blade. Jadi, kita akan membuat demo.blade.php dengan mengikuti jalur berikut.
resources/views/email/demo.blade.php
<!DOCTYPE html> <html> <head> <title>How To Send Mail Using Queue In Laravel 10 - Leravio</title> </head> <body> <center> <h2> <a href="https://leravio.com">Visit Our Website : Leravio</a> </h2> </center> <p>Hello,</p> <p>This is a test mail. This mail send using queue listen in laravel 10.</p> <strong>Thanks & Regards.</strong> </body> </html>
Sekarang, kita akan mengkonfigurasi file view, yang harus kita siapkan untuk pengiriman email. Jadi mari kita konfigurasikan di file .env
MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=your_username MAIL_PASSWORD=your_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}"
Konfigurasi Queue
Sekarang, kita akan menyiapkan konfigurasi pada driver antrian. Jadi, kita akan mengatur “database” pada driver antrean. Selain itu, kita juga akan mendefinisikan driver sebagai Redis. Jadi, di sini kita akan mendefinisikan driver database pada file .env
QUEUE_CONNECTION=database
Setelah itu, kita perlu melakukan migrasi dan membuat tabel untuk antrian. Jadi, mari kita jalankan perintah di bawah ini untuk tabel database antrian.
php artisan queue:table
Sekarang, jalankan migrasi di terminal Anda.
php artisan migrate
Membuat Queue Job
Pada langkah ini, kita akan membuat queue job baru. Jadi, jalankan perintah di bawah ini di terminal Anda.
php artisan make:job SendEmailQueueJob
Setelah menjalankan perintah di atas, file SendEmailQueueJob.php akan dibuat. Kemudian, buka file app/Jobs/SendEmailQueueJob.php dan tambahkan code berikut.
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use App\Mail\SendEmailQueueJob; use Mail; class SendEmailQueueJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $send_mail; /** * Create a new job instance. */ public function __construct($send_mail) { $this->send_mail = $send_mail; } /** * Execute the job. */ public function handle(): void { $email = new SendEmailQueueDemo(); Mail::to($this->send_mail)->send($email); } }
Test Queue Job
Sekarang, kita akan memeriksa queue job. Jadi, tambahkan kode di bawah ini ke file routes/web.php dan kirimkan pekerjaan antrian.
Route::get('send/email', function(){ $send_mail = '[email protected]'; dispatch(new App\Jobs\SendEmailQueueJob($send_mail)); dd('send mail successfully !!'); });
Sekarang, hapus cache konfigurasi menggunakan perintah di bawah ini untuk mengirim email dengan queue di laravel 10.
php artisan config:clear
Jalankan Aplikasi Laravel 10
Sekarang, jalankan laravel 10 untuk kirim email menggunakan contoh queue dengan perintah artisan.
php artisan serve
Setelah itu, jalankan perintah berikut ini.
php artisan queue:listen ATAU php artisan queue:work
Dalam production, Anda memerlukan cara untuk menjaga proses queue:work tetap berjalan. Proses queue:work dapat berhenti berjalan karena berbagai alasan, seperti batas waktu pekerja yang terlampaui atau eksekusi perintah queue:restart.
Untuk alasan ini, Anda perlu mengkonfigurasi monitor proses yang dapat mendeteksi ketika proses queue:work Anda keluar dan secara otomatis memulai ulang proses tersebut. Selain itu, monitor proses dapat memungkinkan Anda untuk menentukan berapa banyak proses queue:work yang ingin Anda jalankan secara bersamaan.
Supervisor adalah monitor proses yang biasa digunakan di lingkungan Linux dan kita akan membahas cara mengkonfigurasinya dalam dokumentasi berikut.
Jadi, mari kita instal Supervisor dengan menggunakan perintah berikut.
Install Supervisor
Supervisor adalah monitor proses untuk sistem operasi Linux dan secara otomatis akan memulai ulang proses queue:work Anda jika gagal. Untuk menginstal Supervisor di Ubuntu, Anda dapat menggunakan perintah berikut.
sudo apt-get install supervisor
Konfigurasi Supervisor
File konfigurasi supervisor biasanya disimpan dalam direktori /etc/supervisor/conf.d. Di dalam direktori ini, Anda dapat membuat sejumlah file konfigurasi yang menginstruksikan supervisor bagaimana proses Anda harus dimonitor.
Sebagai contoh, mari kita buat file laravel-worker.conf untuk memulai dan memonitor proses queue:work.
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 --max-time=3600 autostart=true autorestart=true stopasgroup=true killasgroup=true user=forge numprocs=8 redirect_stderr=true stdout_logfile=/home/forge/app.com/worker.log stopwaitsecs=3600
Start Supervisor
Setelah file konfigurasi dibuat, Anda dapat memperbarui konfigurasi Supervisor dan memulai proses dengan menggunakan perintah berikut.
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*