Cara Install RabbitMQ di CentOS 7


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

Baca  Juga  :  Instalasi Docker di Centos 7

Import  kunci GPG  menggunakan  perintah di bawah  ini.

[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.


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.



Sekarang,  kita  jalankan    script worker.php  untuk meneruskan   pesan  ke  penerima  pesan.

[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.


Kategori

Kategori