Lompat ke konten Lompat ke sidebar Lompat ke footer

Menggunakan Redis Sebagai Queue Driver di Laravel

 


Bagi yang sudah lama menggunakan Laravel sebagai framework sehari-hari, biasanya pernah menggunakan Events, Notifications, Jobs atau Broadcasting. Secara bawaan Laravel menjalankan itu semua tidak menggunakan sistem antrian (Queue).

Sistem antrian (Queue) sendiri mempunyai manfaat. Secara sederhananya kita tidak perlu menunggu proses menjalankan sebuah Event, Notification atau Job sampai selesai. Dengan kata lain proses menjalankan itu semua dibalik layar.

Jadi proses-proses yang akan dijalankan tadi ditampung dalam antrian (Queue) kemudian akan dijalankan satu per satu sesuai prioritasnya.

Laravel memberikan kita pilihan koneksi yang digunakan untuk antrian (Queue), yaitu :

  1. Sync
  2. Database
  3. Beanstalkd
  4. Sqs
  5. Redis

Dalam kesempatan ini saya akan memberi contoh menggunakan Redis sebagai database atau driver antrian (Queue).

Memasang Redis

Langkah paling penting adalah mengecek apakah Redis sudah terpasang di komputer atau laptop kita. Caranya jalankan perintah dibawah ini di Terminal.

redis-cli ping

Apabila hasil outputnya PONG berarti redis sudah terpasang di komputer atau laptop kita.

Bagaimana jika Redis belum terpasang?

Dikarenakan saat ini saya setiap hari menggunakan Macbook Air maka saya hanya mencontohkan cara memasang Redis di sistem operasi Mac OS.

brew update
brew install redis

Jalan perintah tersebut di Terminal. Kemudian jika sudah selesai, cek kembali apakah Redis sudah benar-benar terpasang dengan cara diatas.

Perlu diketahui dari perintah diatas, saya menggunakan Brew sebagai Package Manager di Mac OS. Untuk lebih jelas lagi mengenai Brew, silakan kunjungi websitenya.

Memasang PHP Package predis/predis

Predis/predis ini merupakan Redis Client yang akan digunakan. Secara bawaan pengaturan, Laravel menggunakan PhpRedis yaitu sebuah ekstensi PHP via PECL.

Dikarenakan memasang PhpRedis lebih rumit maka dokumentasi Laravel memberikan alternatif menggunakan predis/predis via composer.

Before using Redis with Laravel, we encourage you to install and use the PhpRedis PHP extension via PECL. The extension is more complex to install but may yield better performance for applications that make heavy use of Redis.Alternatively, you can install the predis/predis package via Composer:

Bagaimana memasang predis/predis di Laravel?

composer install predis/predis

Jalan perintah tersebut di Terminal dan pastikan didalam folder proyek Laravel yang telah disiapkan.

Selanjutnya kita perlu menambahkan pengaturan REDIS_CLIENT di file .env pada proyek Laravel.

REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Membuat Sebuah Notifikasi

Sebenarnya tidak harus notifikasi, terserah bisa menggunakan Event atau Job. Saat ini saya beri contoh sistem antrian (Queue) dengan menggunakan Notifikasi.

Jalankan perintah dibawah ini di Terminal dan pastikan didalam folder proyek Laravel.

php artisan make:notification UserRegistered

Perintah diatas akan menghasilkan sebuah folder App\Notifications dengan sebuah file UserRegistered.php didalamnya.

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class UserRegistered extends Notification
{
    use Queueable;

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->greeting('Hai!')
            ->line('Selamat! Anda sudah terdaftar sebagai pengguna.')
            ->line('Jangan lupa segera login ya...!')
            ->salutation('Terima kasih');
    }
}

Kelas UserRegistered ini dibuat untuk mengirim sebuah email ke pengguna yang baru saja mendaftarkan diri.

Perlu diketahui, saat membuat kelas notifikasi, kelas tersebut belum mengimplementasi sistem atrian (Queue). Maka dari itu perlu menambahkan sedikit kode didalamnya.

class UserRegistered extends Notification implements ShouldQueue

Jadi cukup dengan menambahkan implement ShouldQueue maka notifikasi dijalankan dalam antrian.

Menjalankan Queue Worker

Sebelum mengirim notifikasi ke pengguna, pastikan dulu Queue Worker dijalankan di lokal komputer atau laptop. 

php artisan queue:work

Perlu diingat! Cara ini hanya digunakan di lokal komputer atau laptop kita. Apabila proyek Laravel sudah dalam fase produksi maka caranya pun beda. Artinya proyek Laravel sudah ditempatkan di server baik Hosting atau VPS.

Mengirim Notifikasi

Langkah terakhir adalah mengirim notifikasi ke pengguna, hal ini sebagai bukti bahwa sistem antrian (Queue) berjalan dengan semestinya.

Saya buat contoh sederhana saja, menentukan User dan mengirim Notifikasi.

Route::get('register', function () {
    $user = App\User::find(1);
    $user->notify(App\Notifications\UserRegistered());
});

Tes Mengirim Notifikasi Email
Tes Mengirim Notifkasi Email

Bukti email berhasil dikirim
Bukti Email Berhasil Dikirim

Sekian artikel cara menggunakan Redis sebagai Queue Driver atau Database di Laravel. Ini hanya contoh sederhana saja, kita bisa mengembangkan lagi lebih dari sekedar ini.

Semoga contoh yang sederhana ini bisa menjadi pintu pertama untuk memahami Queue di Laravel.

2 komentar untuk "Menggunakan Redis Sebagai Queue Driver di Laravel"