You are viewing an Archived item in your Knowledge Base, it is not publicly accessible.

Apa yang bisa kami bantu?

A. Pendahuluan

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.


B. Instalasi

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


C. Kesimpulan

RabbitMQ memungkinkan aplikasi untuk mengirim pesan dari satu komponen ke komponen lain dalam aplikasi yang berjalan di berbagai platform atau bahasa pemrograman. Ini memfasilitasi komunikasi antar-sistem dan komunikasi yang asinkron, yang sangat berguna dalam arsitektur mikroservis dan sistem terdistribusi.