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

Power by VitePress & Vue