cara kirim email menggunakan queue di laravel 10

Cara Kirim Email Menggunakan Queue di Laravel 10

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.

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:*

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top