Cara Install RabbitMQ di CentOS 7
Tutorial Linux Indonesia | RabbitMQ merupakan message broker yang
digunakan untuk meneruskan pesan ke
tujuan. Yang ditulis menggunakan
bahasa pemrograman Erlang.
RabbitMQ
ini bisa
di ibaratkan sebagai sebuah
kantor pos sekaligus tukang pos.
Dia akan menerima
pesan yang dikirimkan oleh sender ( pengirim ) dan melakukan forward pesan ke recevier ( penerima ) pesan.
Sekarang, kita
install epel release terlebih dahulu menggunakan perintah di
bawah ini.
[root@localhost ~]# yum -y install epel-release
Kemudian, kita
update server menggunakan command
di bawah ini.
[root@localhost ~]# yum -y update
Sekarang, kita
install erlang.
[root@localhost ~]# yum -y install erlang socat
Lakukan
veritifikasi erlang.
[root@localhost ~]# erl -version
Erlang (ASYNC_THREADS,HIPE) (BEAM) emulator version 5.10.4
[root@localhost ~]#
Untuk masuk
ke mode erlang, menggunakan
perintah di bawah
ini.
[root@localhost ~]# erl
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1>
Sekarang donwload
rabbitmq terlebih dahulu menggunakan
perintah di bawah ini.
[root@localhost ~]# wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
[root@localhost ~]# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
Install
package RPM menggunakan
perintah ini.
[root@localhost ~]# rpm –Uvh rabbitmq-server-3.6.10-1.el7.noarch.rpm
Sekarang,
jalankan layanan rabbitmQ menggunakan perintah
di bawah ini.
[root@localhost ~]# systemctl start rabbitmq-server
[root@localhost ~]# systemctl enable rabbitmq-server
[root@localhost ~]# systemctl status rabbitmq-server
Jika menggunakan firewall
di server kalian,
lakukan allow beberapa
port supaya dapat mengakses
layanan RabbitMQ.
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=4369/tcp
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=25672/tcp
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=15672/tcp
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=1883/tcp
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=8883/tcp
[root@localhost ~]# firewall-cmd --reload
success
Jika kalian mengaktifkan selinux
di server kalian.
Kita berikan izin layanan RabbitMQ.
[root@localhost ~]# setsebool -P nis_enabled 1
Ubah kepemilikan berkas RabbitMQ untuk user RabbitMQ
[root@localhost ~]# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
Install RabbitMQ Manajemen Dashboard
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
Tambahkan
user admin untuk
login ke dashboard.
[root@localhost ~]# rabbitmqctl add_user admin 1passwordadi!
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
BACA JUGA : Cara Reset Password CentOS
Kita dapat mengakses dasboard manjement RabbitMQ, menggunakan link di bawah ini.
Kita dapat mengakses dasboard manjement RabbitMQ, menggunakan link di bawah ini.
Akan muncul
dashboard RabbitMQ. Silahkan
login menggunakan username
dan password yang
sudah di buat sebelumnya.
Jika sudah berhasil login ke
Dashboard RabbitMQ, tampilan akan
seperti ini.
PERINTAH DASAR RABBITMQ
Kalian dapat
menambahkan user
menggunakan perintah di
bawah ini.
[root@localhost ~]# rabbitmqctl add_user bagol69 bagol69.com
Creating user "bagol69"
Kita dapat
melakukan pengecekan user yang
sudah berhasil kita
buat. Menggunakan perintah di bawah ini.
[root@localhost ~]# rabbitmqctl list_users
Listing users
admin [administrator]
bagol69 []
guest1 [administrator\011]
guest [administrator]
Untuk mengubah
password user menggunakan
perintah di bawah
ini.
[root@localhost ~]# rabbitmqctl change_password bagol69 1passwordadi!
Changing password for user "bagol69"
[root@localhost ~]#
Kita juga
dapat menambahkan user
ke group admin RabbitMQ.
[root@localhost ~]# rabbitmqctl set_user_tags bagol69 administrator
Setting tags for user "bagol69" to [administrator]
[root@localhost ~]#
Untuk
menghapus user, kita dapat
menggunakan perintah di bawah ini.
[root@localhost ~]# rabbitmqctl delete_user bagol69
Deleting user "bagol69"
Sekarang, kita
lakukan pengecekan daftar user
menggunakan perintah di
bawah ini. Dan
pastikan user yang tadi
kita hapus, sudah tidak ada
di dalam daftar
user tersebut.
[root@localhost ~]# rabbitmqctl list_users
Listing users
admin [administrator]
guest1 [administrator\011]
guest [administrator]
[root@localhost ~]#
PENGETESAN RABBITMQ
Untuk
melakukan pengetesan terhadap
RabbitMQ, kita install beberapa package yang
dibutuhkan untuk melakukan
pengetesan.
[root@localhost ~]# yum composer php -y
[root@localhost ~]# yum install php-mbstring php-bcmath -y
[root@localhost ~]# composer require php-amqplib/php-amqplib
Kemudian, buat script
untuk mengirim pesan
dari sender.
[root@localhost ~]# nano /home/adi/Queuing/publisher.php
Berikut isi script untuk melakukan
kirim pesan dari
pengirim.
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);
}
Kemudian,
kita buat script
untuk melakukan forward
atau push ke
penerima pesan.
[root@localhost ~]# nano /home/adi/Queuing/worker.php
Berikut isi script
untuk melakukan forward pesan ke penerima pesan.
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();
Sekarang jalankan
script publisher.php untuk
buat job ( pesan )
[root@localhost ~]# cd /home/adi/Queuing/
[root@localhost Queuing]# ls
publisher.php vendor worker.php
[root@localhost Queuing]# php publisher.php
Job created
Job created
Job created
Job created
Job created
Pada dashboard
RabbitMQ sudah ada
pesan yang antri sampai 44 pesan.
Yang menandakan pengetesan menggunakan
script publisher sudah berhasil.
[root@localhost Queuing]# php worker.php
[*] Waiting for messages. To exit press CTRL+C
running
non blocking wait.
[x]
Received {"id":0,"task":"sleep","sleep_period":1}
[x]
Done
Jika kita
lihat di dashboard
RabbitMQ sudah mulai turun
antrian pesan.