A message is data that needs to get processed into information. A queue is a line of things that are processed sequentially. Message queueing is a form of asynchronous communication protocol that allows applications to exchange information by sending messages to each other. It stores messages temporarily if the destination program is busy or not connected. Think of an email sent to a user who is not connected or is busy to reply. The email is stored until the user is connected or replies to it. Messaging increases loose coupling and scalability.
RabbitMQ standing for Rabbit Message Queue is an open-source message broker software that defines queues to which applications connect to send a message. RabbitMQ implements the AMQP (Advanced Message Queuing Protocol). It acts as a middleman that reduces loads of servers by delegating tasks and operations that take up a lot of resources to a third party that has no job. It is lightweight and can be deployed on-premises and in the cloud. It can be used by small startups and large enterprises.
Features of RabbitMQ
- Supports Asynchronous Messaging with multiple messaging protocols.
- Deploy applications with Kubernetes and Docker.
- Develop cross-messaging with different programming languages.
- Can be deployed in distributed configurations to meet high availability and throughput.
- Has a diverse array of tools and plugins for continuous integration.
- Has a command-line tool and Web UI for managing the software.
This guide will show you how to set up RabbitMQ on CentOS 9|AlmaLinux 9|RHEL 9 systems.
#1) Install RabbitMQ on CentOS 9|AlmaLinux 9|RHEL 9
Set the crypto policies to LEGACY to ensure compatibility.
sudo update-crypto-policies --set LEGACY
Then restart your system to apply changes.
sudo reboot
We will install RabbitMQ with a YUM repository that contains the package.
sudo dnf -y install wget
wget https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh -O rabbitmq_script.rpm.sh
chmod +x rabbitmq_script.rpm.sh
sudo os=el dist=8 ./rabbitmq_script.rpm.sh
Next is to add the YUM repository under the /etc/yum.repos.d/ directory that will install RabbitMQ and its Erlang dependency from PackageCloud.
wget https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh -O erlang_script.rpm.sh
chmod +x erlang_script.rpm.sh
sudo os=el dist=8 ./erlang_script.rpm.sh
Update the system after installing the repositories required.
sudo yum update -y
Install the package dependencies with the following commands.
sudo yum install socat logrotate -y
Now install Erlang and RabbitMQ.
sudo yum install rabbitmq-server erlang
Accept installation of the packages.
Dependencies resolved.
======================================================================================================================================================================================================
Package Architecture Version Repository Size
======================================================================================================================================================================================================
Installing:
erlang x86_64 25.0.2-1.el8 rabbitmq_erlang 20 M
rabbitmq-server noarch 3.10.6-1.el8 rabbitmq_rabbitmq-server 14 M
Installing dependencies:
compat-openssl11 x86_64 1:1.1.1k-4.el9_0 appstream 1.5 M
Transaction Summary
======================================================================================================================================================================================================
Install 3 Packages
Total download size: 36 M
Installed size: 59 M
Is this ok [y/N]: y
Start and enable the service at boot time.
sudo systemctl enable --now rabbitmq-server
Check the status of the server.
$ systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-07-30 04:11:07 EAT; 6s ago
Main PID: 2141 (beam.smp)
Tasks: 24 (limit: 48943)
Memory: 101.1M
CPU: 4.397s
CGroup: /system.slice/rabbitmq-server.service
├─2141 /usr/lib64/erlang/erts-13.0.2/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdc>
├─2154 erl_child_setup 32768
├─2179 /usr/lib64/erlang/erts-13.0.2/bin/epmd -daemon
├─2200 /usr/lib64/erlang/erts-13.0.2/bin/inet_gethost 4
└─2201 /usr/lib64/erlang/erts-13.0.2/bin/inet_gethost 4
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: Doc guides: https://rabbitmq.com/documentation.html
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: Support: https://rabbitmq.com/contact.html
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: Tutorials: https://rabbitmq.com/getstarted.html
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: Monitoring: https://rabbitmq.com/monitoring.html
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: Logs: /var/log/rabbitmq/[email protected]
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: /var/log/rabbitmq/[email protected]_upgrade.log
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: <stdout>
Jul 30 04:11:05 alma9.mylab.io rabbitmq-server[2141]: Config file(s): (none)
Jul 30 04:11:07 alma9.mylab.io rabbitmq-server[2141]: Starting broker... completed with 0 plugins.
Jul 30 04:11:07 alma9.mylab.io systemd[1]: Started RabbitMQ broker.
Configure Firewall to allow RabbitMQ port.
sudo firewall-cmd --add-port=5672/tcp --permanent
sudo firewall-cmd --reload
#2) Managing User Accounts in RabbitMQ
To add a user, use the following command. here ‘technixleo‘ is the name of the user I want to add with the password.
$ sudo rabbitmqctl add_user technixleo StrongPassW0rd
Adding user "technixleo" ...
Verify the user has been created by listing the users.
$ sudo rabbitmqctl list_users
Listing users ...
user tags
technixleo []
guest [administrator]
To change a password for a user, use the following command.
$ rabbitmqctl change_password technixleo NewUserPassw0rd
Changing password for user "technixleo" ...
Grant Admin role to a user.
$ sudo rabbitmqctl set_user_tags technixleo administrator
Setting tags for user "technixleo" to [administrator] ...
To delete a user.
rabbitmqctl delete_user technixleo
#3) Create VirtualHost for RabbitMQ
To add a virtual host, use the following command.
$ sudo rabbitmqctl add_vhost /vhost01
Adding vhost "/vhost01" ...
Check to see if it has been created.
$ sudo rabbitmqctl list_vhosts
Listing vhosts ...
name
/vhost01
/
Grant permission to a user for a virtual host. the permissions are; modify, write and read and are represented by the asterisk * symbol on the following command.
$ sudo rabbitmqctl set_permissions -p /vhost01 technixleo ".*" ".*" ".*"
Setting permissions for user "technixleo" in vhost "/vhost01" ...
Show permissions for the virtual host as shown below.
$ sudo rabbitmqctl list_permissions -p /vhost01
Listing permissions for vhost "/vhost01" ...
user configure write read
technixleo .* .* .*
To show permissions of the virtual host for a specific user.
$ sudo rabbitmqctl list_user_permissions technixleo
Listing permissions for user "technixleo" ...
vhost configure write read
/vhost01 .* .* .*
To delete permissions of a specific user for a virtual host, use the following command.
rabbitmqctl clear_permissions -p /vhost01 technixleo
To delete a virtual host, use the following command.
rabbitmqctl delete_vhost /vhost01
#4) Enable RabbitMQ Web UI
Enable the Management Plugin
$ sudo rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node [email protected]:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to [email protected]
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
Restart the server
sudo systemctl restart rabbitmq-server
Access the Web UI using http://server-ip-address:15672 on any client. Then log in using the user account you created.

The dashboard appears as shown below.

#5) Install and use rabbitmqadmin
rabbitmqadmin is a Python command-line tool that interacts with the HTTP API. It uses the same API as RabbitMQ and provides access to a subset of functionalities in the UI from the command line.
Install Python if you do not have it on your system.
sudo yum -y install python3
Check for the version to verify the installation.
$ python3 -V
Python 3.9.10
To install rabbitmqadmin, Login to Web UI and move to http://server-IP address:15672/cli

Click on Download it and select Save File.

Make the file executable and drop it on your path
cd Downloads
sudo mv rabbitmqadmin /usr/local/bin
sudo chmod +x /usr/local/bin/rabbitmqadmin
export PATH="/usr/local/bin:${PATH}"
Check Permission settings
$ sudo ls -l /usr/local/bin/rabbitmqadmin
-rwxr-xr-x. 1 technixleo technixleo 42416 Jul 1 00:40 /usr/local/bin/rabbitmqadmin
Basic rabbitmqadmin commands
To list users
$ rabbitmqadmin list users
+------------+--------------------------------+--------------------------------------------------+---------------+
| name | hashing_algorithm | password_hash | tags |
+------------+--------------------------------+--------------------------------------------------+---------------+
| guest | rabbit_password_hashing_sha256 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | administrator |
| technixleo | rabbit_password_hashing_sha256 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | administrator |
+------------+--------------------------------+--------------------------------------------------+---------------+
To list the available virtual hosts
$ rabbitmqadmin list vhosts
+----------+----------+
| name | messages |
+----------+----------+
| / | |
| /vhost01 | |
+----------+----------+
To create a user.
$ rabbitmqadmin declare user name=technix password=PassWord tags=administrator
tags=administrator
user declared
To create a virtual host
$ rabbitmqadmin declare vhost name=/vhost02
vhost declared
To grant permission to a user for a virtual host.
$ rabbitmqadmin declare permission vhost=/vhost02 user=technix configure=".*" write=".*" read=".*"
permission declared
To add a message queue.
$ rabbitmqadmin -V /vhost02 -u technix -p PassWord declare queue name=my_queue01
queue declared
To send a message.
$ rabbitmqadmin -V /vhost02 -u technix -p PassWord publish routing_key=my_queue01 payload='Hello RabbitMQ World! My name is technix!' exchange=amq.default
Message published
To receive a message.
$ rabbitmqadmin -V /vhost02 -u technix -p PassWord get queue=my_queue01
+-------------+----------+---------------+-------------------------------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------------------------------------+---------------+------------------+------------+-------------+
| my_queue01 | | 0 | Hello RabbitMQ World! My name is technix! | 41 | string | | False |
+-------------+----------+---------------+-------------------------------------------+---------------+------------------+------------+-------------+
Conclusion
From this guide, we have seen how to set up RabbitMQ on CentOS 9|AlmaLinux 9|RHEL 9 systems. We have also seen the benefits of RabbitMQ which include indirectly connecting the published message to a server and then routing it to a consumer (applications that process the message). RabbitMQ is lightweight making it the most deployed message broker on-premises and on the cloud.
Check out more guides on RHEL 9:
- Install Redis Server on CentOS 9/AlmaLinux 9 / RHEL 9
- Enable automating updates on CentOS 9/AlmaLinux 9/RHEL 9
- Install Docker Compose on CentOS 9 / AlmaLinux 9 / RHEL 9