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