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.configBoot(systemd)
bash
cat > /etc/systemd/system/rabbitmq.service << "EOF"
...
EOF
systemctl daemon-reload
systemctl start rabbitmq.service
systemctl enable rabbitmq.serviceVerify
bash
# syntax check
/usr/local/erlang/bin/erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 13.2.2.2
/opt/rabbitmq/sbin/rabbitmqctl statusTroubleshooting
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 shStarting 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: