menu

Laravel - RabbitMQ (send message)


Pada tutorial sebelumnya kita sudah menginstall rabbitmq, tutorial kali ini kita akan membuat engine send message to rabbitmq dari framework laravel.

Engine yang akan kita buat ini akan kita ditempel pada project laravel yang sudah kita buat sebelumnya (silahkan ikuti tutorial laravel secara terurut, bisa lihat di books), atau download projectnya disini.

Pertama, install library rabbitmq pada laravel, dalam hal ini kita akan menggunakan library php-amqplib/php-amqplib, install library dengan cara, ketikan pada terminal code berikut,
php composer require php-amqplib/php-amqplib

Selanjutnya, tambahkan route baru untuk controller rabbitmq yang akan kita buat, terletak pada path protected/app/routes file web.php
///////////
// QUEUE //
///////////
Route::group(array('prefix' => 'queue'), function(){
 Route::get('sendRabbit', 'Controller\QueueController@sendRabbit');
});

Setelah itu, buat controller baru dengan nama QueueController.php pada path protected/app/controllers/ dan masukkan code berikut,
<?php namespace Controller;

use Model\User;
use \Input;
use \View;
use \Validator;
use \Redirect;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

class QueueController extends \BaseController 
{
 function sentQueueRabbitMQ($message = [])
 {
    $connection = new AMQPStreamConnection(RABBITMQ_HOST, RABBITMQ_PORT, RABBITMQ_LOGIN, RABBITMQ_PASSWORD);

    $channel = $connection->channel();

    if (!empty($message)) {
      $message = new AMQPMessage(json_encode($message));
      $channel->basic_publish($message, '', RABBITMQ_QUEUE);
    }

    $channel->close();
    $connection->close();
 }

 public function sendRabbit()
 {
  $id = str_random(4);
  $message = [
   'id' => $id,
   'message' => 'halo '.$id
  ];
  $this->sentQueueRabbitMQ($message);
  return Redirect::to('/');
 }
}

Terakhir buat tampilannya untuk test saja berupa satu button untuk mengirim message yang berupa json ke rabbitmq dengan cara,
edit file header.blade.php pada path protected/app/views/layouts/web/ menjadi seperti ini,
<div class="header">
 <div class="banner">
  <div class="welcome">Welcome</div>
  {{-- code dibawah ini menggunakan constant variabel --}}
  <div class="gambar"><a href="#"><img src="{{ IMAGE_HEADER }}" style="width:"100px" height="129px";"></a></div>
 </div>
 <hr>
 <div class="menu">
  <div class="kiri">
   <li>
    <div class="dropdown">
      <button class="btn btn-default">Menu(css)</button>
      <div class="dropdown-content">
        <a href="{{ URL::to('crud/users')}}">User</a>
        <a href="{{ URL::to('book')}}">Index Book</a>
        <a href="{{ URL::to('javaScript/js1')}}">Belajar Script</a>
        <a href="{{ URL::to('javaScript/js2')}}">Belajar Script2</a>
        <a href="{{ URL::to('javaScript/js3')}}">Belajar Script3</a>
        <a href="{{ URL::to('javaScript/js4')}}">Belajar Script4</a>
        <a href="{{ URL::to('javaScript/js5')}}">Belajar Script5</a>
        <a href="{{ URL::to('javaScript/js6')}}">Belajar Script6</a>
        <a href="{{ URL::to('javaScript/js7')}}">Belajar Script7</a>
      </div>
    </div>
   </li>
   <li>
     <div class="dropdown-script">
      <button onclick="myFunction()" class="dropbtn btn btn-default">Translate</button>
      <div id="myDropdown" class="dropdown-content-script">
        <a href="{{ URL::to('lang/en') }}">English</a>
        <a href="{{ URL::to('lang/ina') }}">Indonesia</a>
      </div>
     </div>
   </li>
  </div>
  <div class="kanan">
   @if(Auth::user())
    <li onclick="if(confirm('Are you sure to logout?')) location.href='{{ URL::to('logout') }}';">Logout</li>
   @else
    <li onclick="location.href='{{ URL::to('login') }}';">Login</li>
   @endif
   <li onclick="location.href='{{ URL::to('register') }}';">Register</li>

   <!-- Send queue rabbit -->
   <li onclick="location.href='{{ URL::to('queue/sendRabbit') }}';">Send Rabbit</li>
  </div>
 </div>
</div>

Sehingga tampilannya akan tampak seperti ini,


Saat di klik button Send Rabbit maka pada rabbitmq (http://localhost:15672/#/) akan muncul tampilan seperti ini,



Tutorial berikutnya kita akan membuat engine untuk consume message rabbitmq,

===DONE!===