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.

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

 
 

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.