Installasi RabbitMQ Pada Ubuntu 18.04
0 people liked this article
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
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.
Tidak ada komentar:
Posting Komentar