Skip to content

RabbitMQ ​

Introduction ​

RabbitMQ is a mature, open-source message broker implementing AMQP 0-9-1, with support for MQTT, STOMP, and AMQP 1.0 via plugins. It offers flexible routing through exchanges (direct, topic, fanout, headers), reliable delivery with acknowledgments and persistence, and high availability through quorum queues and clustering — well suited for decoupling services and asynchronous task queues.

How to Install ​

Starting via Binary ​

Quick Start ​

bash
# dependencies: install erlang
wget https://github.com/erlang/otp/releases/download/OTP-25.3.2.4/otp_src_25.3.2.4.tar.gz
tar xf otp_src_25.3.2.4.tar.gz && rm -f otp_src_25.3.2.4.tar.gz 
cd ./otp_src_25.3.2.4
./configure --prefix=/usr/local/erlang
make && make install

# download source
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.2/rabbitmq-server-generic-unix-3.12.2.tar.xz
tar -xf rabbitmq-server-generic-unix-3.12.2.tar.xz && rm -f rabbitmq-server-generic-unix-3.12.2.tar.xz
mv rabbitmq_server-3.12.2 /opt/rabbitmq

# compile 
# no need

# postinstallation
cd /opt/rabbitmq
export PATH=$PATH:/usr/local/erlang/bin:/opt/rabbitmq/sbin
# echo "export PATH=$PATH:/usr/local/erlang/bin:/opt/rabbitmq/sbin" >> ~/.bashrc && source ~/.bashrc

# startup and init
rabbitmq-server -detached
rabbitmqctl add_user admin 123456
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
rabbitmqctl set_user_tags admin administrator
rabbitmqctl stop && rabbitmq-server -detached

### option: cluster mode
# startup
RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbitmq1 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbitmq2 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbitmq3 rabbitmq-server -detached
# add to cluster
rabbitmqctl -n rabbitmq2 stop_app
rabbitmqctl -n rabbitmq2 reset
rabbitmqctl -n rabbitmq2 join_cluster --ram rabbitmq1@`hostname -s` # --ram = memory node
rabbitmqctl -n rabbitmq2 start_app
rabbitmqctl -n rabbitmq3 stop_app
rabbitmqctl -n rabbitmq3 reset
rabbitmqctl -n rabbitmq3 join_cluster --disc rabbitmq1@`hostname -s` # --disc = disk node(default)
rabbitmqctl -n rabbitmq3 start_app
# check status
rabbitmqctl -n rabbitmq1 cluster_status
# set mirror cluster
# rabbitmqctl -n rabbitmq1 set_policy ha-all "^" '{"ha-mode":"all"}'

Config and Boot ​

Config ​
bash
# $RABBITMQ_HOME/etc/rabbitmq/rabbitmq.conf
# $RABBITMQ_HOME/etc/rabbitmq/advanced.config
Boot(systemd) ​
bash
cat > /etc/systemd/system/rabbitmq.service << "EOF"
...
EOF

systemctl daemon-reload
systemctl start rabbitmq.service
systemctl enable rabbitmq.service

Verify ​

bash
# syntax check
/usr/local/erlang/bin/erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 13.2.2.2

/opt/rabbitmq/sbin/rabbitmqctl status

Troubleshooting ​

bash
# problem 1
#

Starting via Docker ​

bash
# pull image
docker pull rabbitmq:3

# run
docker run --rm --name rabbitmq -d rabbitmq:3
# run with management
docker run --rm --name -it rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management

# test
docker exec -it rabbitmq sh

Starting via Kubernetes ​

bash
# add and update repo
helm repo add bitnami https://charts.bitnami.com/bitnami
helm update

# get charts package
helm pull bitnami/rabbitmq --untar
cd rabbitmq

# configure and run
vim values.yaml
...
helm -n middleware install rabbitmq .

Reference:

  1. Official Website
  2. Repository
  3. Erlang Download

Powered by VitePress & Vue