Implementasi Message Broker dengan RabbitMq dan Laravel

Implementasi Message Broker dengan RabbitMq dan Laravel

Pertama-tama kita buat baru project laravel dengan mengetikan command

composer create-project --prefer-dist laravel/laravel laravel-rabbitmq

Kemudian masuk ke folder laravel-rabbitmq, dan jalankan

composer require vladimir-yuldashev/laravel-queue-rabbitmq

Setelelah itu buka file app/config/queue.php tambahkan konfigurasi driver rabbitmq ke dalam file tersebut,

'connections' => [
    // ...

    'rabbitmq' => [
    
       'driver' => 'rabbitmq',
       'queue' => env('RABBITMQ_QUEUE', 'default'),
       'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
   
       'hosts' => [
           [
               'host' => env('RABBITMQ_HOST', '127.0.0.1'),
               'port' => env('RABBITMQ_PORT', 5672),
               'user' => env('RABBITMQ_USER', 'guest'),
               'password' => env('RABBITMQ_PASSWORD', 'guest'),
               'vhost' => env('RABBITMQ_VHOST', '/'),
           ],
       ],
   
       'options' => [
           'ssl_options' => [
               'cafile' => env('RABBITMQ_SSL_CAFILE', null),
               'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
               'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
               'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
               'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
           ],
       ],
   
       /*
        * Set to "horizon" if you wish to use Laravel Horizon.
        */
       'worker' => env('RABBITMQ_WORKER', 'default'),
        
    ],

    // ...    
],

Langkah Selanjutnya adalah menginstall RabbitMq, Anda bisa mengunjungi halaman berikut https://www.rabbitmq.com/download.html untuk Installasinya. Kali ini kita gunakan docker untuk install rabbitmq di lokal, maka tingga jalankan command berikut:

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

Setelelah itu Buat Template Email SendMailTemplate.php di app/Mail/SendMailTemplate.php dengan code berikut:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SendMailTemplate extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * The content instance.
     *
     * @var content
     */
    protected $content;


    public function __construct($content)
    {
        $this->content = $content;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('templateEmail')
            ->with([
                'content' => $this->content
            ]);
    }
}

Setelah itu, buat viewnya pada folder resources/views dengan nama templateEmail.blade.php Isikan sebagai berikut:

{{ $content }}

Lalu buat MailController.php pada folder app/Http/Controllers dengan nama MailController.php

<?php

namespace App\Http\Controllers;

use App\Mail\SendMailTemplate;
use Illuminate\Support\Facades\Mail;

class MailController extends Controller
{
    public function sendEmail()
    {
        $email = request("email");
        Mail::to($email)->send(new SendMailTemplate("Halo"));
    }

    public function sendEmailQueue()
    {
        $email = request("email");
        Mail::to($email)->queue(new SendMailTemplate("Halo"));
    }
}

Tambahkan pada file routes/web.php. Routing atas adalah mengirim email secara syncronous tanpa menggunakan message broker, sedangkan yang bawah menggunakan message broker dengan queue driver yang kita set dengan rabbitmq.

Route::post('/mail', 'MailController@sendEmail');
Route::post('/mail-queue', 'MailController@sendEmailQueue');

Kemudian setting file .env pada bagian MAIL config, sesuaikan dengan mail server yang anda punya, saat ini kita gunakan smtp gmail , maka konfigurasinya sebagai berikut

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=GMAIL KAMU
MAIL_PASSWORD=PASSWORD GMAIL KAMU
MAIL_ENCRYPTION=ssl

Setelah itu jalankan “php artisan serve“. dan jalankan pula “php artisan queue:work”

Kemudian kita buka postman untuk mengetest kedua route tersebut.

Nampak perbedaan yang sangat signifikan antara post pertama dengan post kedua, karena post kedua menggunakan queue karena proses pengiriman email secara paralel. Sehingga ketika kita melakukan request belum tentu setelah mendapatkan response email berhasil terkirim.

Kalian bisa melihat hasil kodenya di https://github.com/agung3wi/laravel-rabbitmq

Demikian Merupakn artikel mengenai Implementasi Message Broker dengan RabbitMq dan Laravel.

Baca Artikel Kami Lainnya : Skill Set yang kalian harus pelajari jika ingin menjadi fullstack enginer zaman now