Apa yang bisa kami bantu?

A. Pendahuluan

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.

B. Konfigurasi dan Instalasi

Langkah – 1 Tambahkan Hostname dan IP Address

Tambahkan IP Address dan hostname di /etc/hosts

$ vi /etc/hosts


Langkah – 2 Install Erlang

Sebelum kita install Erlang, terlebih dahulu kita install epel-release menggunakan perintah di bawah.

$ yum -y install epel-release
$ yum -y update

Selanjutnya install Erlang.

$ yum -y install erlang socat 
$ erl -version

Untuk masuk ke mode erlang gunakan perintah di bawah.

$ erl

Langkah – 3 Install RabbitMQ

Unduh rabbitMQ rpm menggunakan perintah di bawah.


$ wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm

Untuk versi lain nya bisa diunduh menggunakan tautan ini: https://www.rabbitmq.com/download.html, Impor kunci GPG menggunakan perintah di bawah.

$ rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

Instal paket RPM menggunakan perintah di bawah.

$ rpm -Uvh rabbitmq-server-3.6.10-1.el7.noarch.rpm

Jalan service rabbitmq.

$ systemctl start rabbitmq-server

Aktifkan auto start service rabbitmq pada saat server dalam kondisi poweroff atau restart.

$ systemctl enable rabbitmq-server

Cek service rabbitmq.

$ systemctl status rabbitmq-server

Install RabbitMQ Management Dashboard (Opsional).

$ rabbitmq-plugins enable rabbitmq_management

Ubah kepemilikan berkas RabbitMQ untuk user RabbitMQ.

$ chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/

Tambahkan user admin untuk login ke dashboard.

$ rabbitmqctl add_user admin StrongPassword
$ rabbitmqctl set_user_tags admin administrator
$ rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"


Kemudian akses RabbitMQ Dashboard dan login menggunakan username dan password yang telah dibuat sebelumnya melalui browser Anda http://Your_Server_IP:15672/

Gambar 1 : RabbitMQ

Langkah – 4 Pengetesan

Pada pengetesan kali ini akan menggunakan bahasa pemograman PHP sebagai antriannya, berikut ini adalah langkah-langkahnya.
Instal composer dan PHP menggunakan local CentOS packages.

$ yum install composer php

Instal paket php mbstring dan bcmath sesuai dengan versi php yang Anda gunakan.


$ yum install php-mbstring php-bcmath

Instal php-amqplib menggunakan composer.


$ composer require php-amqplib/php-amqplib

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');
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
);
$job_id=0;
while (true)
{

$jobArray = array(
'id' => $job_id++,
'task' => 'sleep',
'sleep_period' => rand(0, 3)
);
$msg = new \PhpAmqpLib\Message\AMQPMessage(
json_encode($jobArray, JSON_UNESCAPED_SLASHES),
array('delivery_mode' => 2) # make message persistent
);
$channel->basic_publish($msg, '', RABBITMQ_QUEUE_NAME);
print 'Job created' . PHP_EOL;
sleep(1);
}
$ vi /home/ubuntu/Queuing/worker.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.

Gambar 2 : Queued Messages

Atau menggunakan perintah di bawah ini melalui terminal.

$ rabbitmqctl list_queues
Gambar 3 : List Queued Messages

 
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

Gambar 4 : publisher.php

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

Gambar 5 : Queued Messages

Selanjutnya kita jalankan worker.php untuk mengurangi antrian di RabbitMQ.
 

Gambar 6 : Queued Messages

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

Gambar 7 : Tasks Queue

C. Kesimpulan

Artikel tersebut membahas proses instalasi dan pengujian RabbitMQ, sebuah message broker yang menangani komunikasi antara sender dan receiver. Proses ini diobservasi melalui dashboard RabbitMQ, memperlihatkan queuing dan eksekusi job dengan sukses.

Selamat! Anda sudah bisa install RabbitMQ. Semoga artikel ini dapat membantu Anda. Temukan bantuan lainnya melalui Knowledge Base Biznet Gio. Jika Anda masih memiliki kendala silahkan hubungi support@biznetgio.com atau (021) 5714567.