Installasi RabbitMQ pada Ubuntu 18.04

-

RabbitMQ

RabbitMQ merupakan message broker yang ditulis dengan menggunakan bahasa pemrograman Erlang. RabbitMQ ini bisa diibaratkan sebagai sebuah kantor pos sekaligus tukang pos. Dia akan menerima pesan yang dikirimkan oleh sender lalu melakukan forward/push pesan tersebut kepada receiver. Berikut ini adalah langkah-langkah instalasi dan pengetesan queuing pada RabbitMQ.

Langkah – 1 Tambahkan Hostname dan IP Address

Tambahkan IP Address dan hostname di /etc/hosts

$ vi /etc/hosts


Langkah – 2 Install Erlang

Jalankan perintah di bawah untuk Import Erlang Repository GPG Key

$ wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add -


Tambahkan repository ke dalam server menggunakan perintah di bawah

$ echo "deb https://packages.erlang-solutions.com/ubuntu bionic contrib" | sudo tee /etc/apt/sources.list.d/rabbitmq.list


Update system package list dan kemudian install Erlang

$ apt update
$ apt -y install erlang


Langkah – 3 Install RabbitMQ

Setelah menginstall Erlang, langkah selanjutnya adalah import RabbitMQ Repository GPG Key

$ wget -O- https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc | sudo apt-key add -
$ wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -


Kemudian tambahkan RabbitMQ Repository

$ echo "deb https://dl.bintray.com/rabbitmq/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list


Update system package list dan kemudian install RabbitMQ

$ apt update
$ apt -y install rabbitmq-server


Install RabbitMQ Management Dashboard (Opsional)

$ rabbitmq-plugins enable rabbitmq_management


Buka port 5672 dan 15672 di firewall

$ sudo ufw allow proto tcp from any to any port 5672,15672


Tambahkan user admin untuk login ke dashboard

$ rabbitmqctl add_user admin PasswordAnda
$ rabbitmqctl set_user_tags admin administrator


Kemudian akses RabbitMQ Dashboard dan login menggunakan username dan password yang telah dibuat sebelumnya melalui browser yang Anda gunakan


http://ipaddress:15672



Langkah – 4 Pengetesan

Pada pengetesan kali ini akan menggunakan bahasa pemograman PHP sebagai antriannya, berikut ini adalah langkah-langkahnya

Install composer menggunakan local ubuntu packages

# apt update
# apt install composer -y


Install PHP

# apt install php


Cek versi PHP yang kamu gunakan perintah di bawah

# php -v



Install paket php mbstring dan bcmath sesuai dengan versi php yang Anda gunakan

# apt install php7.2-mbstring php7.2-bcmath


Install php-amqplib menggunakan composer

# composer require php-amqplib/php-amqplib


Buat folder untuk pengetesan

$ mkdir /home/ubuntu/Queuing


Buat dua file pengetesan dan beri nama publisher.php yang digunakan untuk membuat task dan worker.php yang digunakan untuk melakukan forward/pushing kepada receiver

$ vi /home/ubuntu/Queuing/publisher.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
define("RABBITMQ_HOST", "localhost");
define("RABBITMQ_PORT", 5672);
define("RABBITMQ_USERNAME", "guest");
define("RABBITMQ_PASSWORD", "guest");
define("RABBITMQ_QUEUE_NAME", "task_queue");
$connection = new \PhpAmqpLib\Connection\AMQPStreamConnection(
    RABBITMQ_HOST, 
    RABBITMQ_PORT, 
    RABBITMQ_USERNAME, 
    RABBITMQ_PASSWORD
);
$channel = $connection->channel();
$channel->queue_declare(
    $queue = RABBITMQ_QUEUE_NAME,
    $passive = false,
    $durable = true,
    $exclusive = false,
    $auto_delete = false,
    $nowait = false,
    $arguments = null,
    $ticket = null
);
echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
$callback = function($msg){
    echo " [x] Received ", $msg->body, "\n";
    $job = json_decode($msg->body, $assocForm=true);
    sleep($job['sleep_period']);
    echo " [x] Done", "\n";
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume(
    $queue = RABBITMQ_QUEUE_NAME,
    $consumer_tag = '',
    $no_local = false,
    $no_ack = false,
    $exclusive = false,
    $nowait = false,
    $callback
);
try
{
    while (count($channel->callbacks)) 
    {
        print "running non blocking wait." . PHP_EOL;
        $channel->wait($allowed_methods=null, $nonBlocking=true, $timeout=1);
    }
}
catch (Exception $e)
{
    print "There are no more tasks in the queue." . PHP_EOL;
}
$channel->close();
$connection->close();

Sebelum menjalankan publisher.php, login terlebih dahulu ke dashboard RabbitMQ untuk melihat total Queued Messages, seperti gambar di bawah



Atau menggunakan perintah di bawah ini melalui terminal

$ rabbitmqctl list_queues



Dari grafik di atas kita bisa melihat bahwa saat ini tidak terdapat antrian di RabbitMQ, selanjutnya kita akan coba buat Job dengan menjalankan publisher.php



Dan kita lihat kembali pada grafik terpantau saat ini ada 30 Job di antrian RabbitMQ



Selanjutnya kita jalankan worker.php untuk mengurangi antrian di RabbitMQ



Terlihat pada grafik antrian lambat laun akan berkurang oleh worker.php yang kita jalankan sebelumnya