Mudahnya Membuat Queue Mail di Laravel 5

Mudahnya Membuat Queue Mail di Laravel 5

Pernah tidak kamu mengalami sebuah kondisi untuk membuat fitur antrian pekerjaan yang akan dilakukan oleh aplikasi yang sedang kamu develop? Kondisi ini paling banyak kita alami ketika berhadapan dengan e-mail. Tentu saja, dalam proses pengiriman e-mail yang begitu banyak tidak dapat dilakukan sekaligus, selain karena penyedia mail server melakukan limit agar tidak terkesan spamming, juga akan membuat load aplikasi menjadi lebih lama karena user akan menunggu hingga proses pengiriman e-mail selesai.

Pada kesempatan kali ini, kita akan belajar bagaimana dengan mudahnya membuat queue mail di Laravel 5. Untuk membuatnya, kita dapat menggunakan database, redis, amazon sqs, beanstalkd, dan lain sebagainya untuk bertidak sebagai queue driver.

Laravel Queue akan membantu kita dalam mengurangi load time yang dibutuhkan user dan dapat diterapkan pada setiap setiap task yang dianggap perlu. Maka kita akan mencoba menggunakannya dengan case yang sederhana untuk menggambarkan bagaimana Laravel Queue bekerja, dan adapun case yang akan kita akan angkat adalah Mengirim email dengan database driver.

Baca Juga: Berkenalan Dengan Spring Boot

Sending Email With Queue

Karena kita memulainya dari awal, maka agar tidak membingungkan, saya beramsumsi anda telah memiliki Laravel 5 fresh install. Tahap awal kita akan membuat sebuah fungsi untuk mengirim email menggunakan Mail facade, jalankan command berikut:

php artisan make:mail KurirEmail

Sekarang kita telah memiliki sebuah file bernama KurirEmail.php yang berada didalam folder App\Mail, kemudian lakukan perubahan menjadi seperti ini:

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

Fungsi diatas membutuhkan mail template dengan nama daftar.php yang diletakkan didalam direktori resources/views/emails (Jika belum punya, silahkan buat folder emails), kemudian buat badan email berikut:

<p>Hi, Kamu, Iya Kamu!</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>

Tentu saja kita membutuhkan konfigurasi email, karena task yang diangkat berhubungan dengan email, maka lakukan perubahan .env pada baris berikut:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
[email protected]
MAIL_PASSWORD=Password_email_anda
MAIL_ENCRYPTION=ssl

Note: Sesuaikan konfigurasinya dengan mail server anda.

Konfigurasi Queue

Tiba saatnya untuk menggunakan fitur queue dari Laravel, karena kita akan menggunakan database sebagai driver dari queue, maka buka file .env kemudian lakukan konfigurasi dengan mengubah baris berikut menjadi database:

QUEUE_DRIVER=database

Karena kita membutuhkan table queue untuk menyimpan job yang akan dikerjakan, maka generate migration dan lakukan migrate dengan dua command dibawah ini:

php artisan queue:table
php artisan migrate

Tiba saatnya untuk membuat queue job, buat file SendEmail.php terlebih dahulu dengan command:

php artisan make:job SendEmail

Kemudian tambahkan code berikut untuk memberikan perintah agar job yang telah di-schedule dapat dikerjakan:

<?php
​
namespace App\Jobs;
​
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Mail\KurirEmail as KurirEmail;
use Mail;
​
class SendEmail 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 KurirEmail();
        Mail::to($this->details['email'])->send($email);
    }
}

Langkah terakhir, definisikan route or anything dengan tujuan untuk membuat job yang akan dikerjakan. Buka file routes/web.php:

Route::get('coba', function(){
    $details['email'] = '[email protected]';
    dispatch(new App\Jobs\SendEmail($details));
​
    dd('Berhasil');
});

Buka browser kemudian akses: http://localhost:8000/coba dan dapat kamu lihat bahwa load time akan menjadi lebih cepat karena proses pengiriman email dilakukan di background. Kamu juga dapat melihat queue proses dengan menggunakan command:

php artisan queue:listen

Baca Juga: Membuat Aplikasi Chatting React Native

Kesimpulan

Laravel Queue sangat membantu dalam meng-handle pekerjaan yang membutuhkan waktu untuk menyelesaikan prosesnya. Adapun ruang lingkup penerapannya, seperti e-commerce dimana kita tidak lagi membuat fungsi pengiriman e-mail misalnya yang akan langsung dieksekusi ketika user checkout atau menyelesaikan pesanan. Sebab tentu saja apabila terjadi gagal koneksi dengan server email, maka user akan merasakan dampak yang kurang menyenangkan.

Category:
Share:

Comments