TL;DR

  • Scenario: Using RPM for RabbitMQ production deployment on RHEL systems (CentOS/RockyLinux), while using Docker Compose for quick learning.
  • Conclusion: Key risks are Erlang/RabbitMQ version compatibility and package source consistency; followed by ports, plugins, user permissions and security baseline.
  • Output: Deployable installation path, version matrix writing and high-frequency error quick reference for production deployment and troubleshooting.

RabbitMQ Installation

Environment Preparation

  1. Operating System Environment:

    • Supports CentOS 7/8, RockyLinux 8/9 and other RHEL-based distributions
    • Using minimal installation recommended to reduce unnecessary software conflicts
  2. Erlang Environment Requirements:

    • RabbitMQ is a message middleware running on Erlang VM (BEAM)
    • Must pre-install compatible version of Erlang runtime
    • Recommended version not lower than Erlang 23.x
  3. System Dependency Packages:

    • socat: For inter-cluster communication
    • logrotate: Log rotation management
    • openssl: Secure communication support
    • Other build toolchain (gcc, make, etc.)

socat Installation

yum install socat -y

Erlang Installation

Download Erlang RPM package:

https://github.com/rabbitmq/erlang-rpm/releases/download/v23.0.2/erlang-23.0.2-1.el7.x86_64.rpm

Upload file to server and execute installation:

rpm -ivh erlang-23.0.2-1.el7.x86_64.rpm

RabbitMQ Installation

Download RabbitMQ:

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.4/rabbitmq-server-3.8.4-1.el7.noarch.rpm

After uploading to server, install:

rpm -ivh rabbitmq-server-3.8.4-1.el7.noarch.rpm

Enable Plugins

rabbitmq-plugins enable rabbitmq_management

Several Ways to Start RabbitMQ Service

systemctl start rabbitmq-server
  • This is the most standard startup method, applicable to Linux systems using systemd
  • Automatically handles service dependencies and logging
2. Direct Executable (Suitable for Development)
rabbitmq-server
  • Runs in foreground, convenient for viewing real-time logs
  • Press Ctrl+C to stop service
  • Typical use case: Quick startup during local development testing
3. Background Daemon Mode
rabbitmq-server -detached
  • Adding -detached parameter runs service in background
  • Does not occupy current terminal
  • Stopping service requires rabbitmqctl stop
# Check service status
systemctl status rabbitmq-server

# Set开机自启
systemctl enable rabbitmq-server

# Stop service
systemctl stop rabbitmq-server

Add User

rabbitmqctl add_user root 123456

Add Permissions

rabbitmqctl set_permissions root -p / ".*" ".*" ".*"

Set User Tags (RabbitMQ User Permission Management)

rabbitmqctl set_user_tags root administrator

Detailed Explanation:

  1. This command sets tags for RabbitMQ user, adding administrator tag to user root

  2. Tag type explanation:

    • administrator: Admin permissions, has all operation permissions
    • monitoring: Monitoring permissions, can view all information but cannot modify
    • policymaker: Policy-making permissions, can manage virtual host policies
    • management: Basic management permissions, can use management plugin
  3. Related commands:

    • View user tags: rabbitmqctl list_users
    • Clear user tags: rabbitmqctl clear_user_tags username

Docker Compose

Quickly start service via container:

services:
  rabbitmq:
    image: rabbitmq:3.8.4-management
    container_name: rabbitmq-3.8
    restart: unless-stopped
    ports:
      - "5672:5672"      # AMQP
      - "15672:15672"    # Management interface
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: secret
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
volumes:
  rabbitmq_data:

Start Service

docker compose up -d

Access Service

Access port 15672, fill in username and password from the file:

  • Username: admin
  • Password: secret

RabbitMQ Management Commands

Service Start and Stop

Foreground Start

rabbitmq-server

Background Start

rabbitmq-server -detached

Stop Service

rabbitmqctl stop

Application Management

Application Control

# Start application
rabbitmqctl start_app

# Stop application (without stopping Erlang VM)
rabbitmqctl stop_app

Node Status Check

rabbitmqctl status

Queue Management

View Queues

rabbitmqctl list_queues

Virtual Host Management

rabbitmqctl list_vhosts

Plugin Management

# List all available plugins
rabbitmq-plugins list

# Enable specified plugin
rabbitmq-plugins enable <plugin-name>

# Disable specified plugin
rabbitmq-plugins disable <plugin-name>

User Management

# Add new user
rabbitmqctl add_user username password

# List all users
rabbitmqctl list_users

# Delete user
rabbitmqctl delete_user username

# Clear permissions
rabbitmqctl clear_permissions -p vhostpath username

Advanced Usage Examples

View Queue Details

rabbitmqctl list_queues name messages messages_ready messages_unacknowledged

Create Virtual Host and Set Permissions

# Create vhost
rabbitmqctl add_vhost /my_vhost

# Set user permissions
rabbitmqctl set_permissions -p /my_vhost username ".*" ".*" ".*"

View Connection Information

rabbitmqctl list_connections

View Channel Information

rabbitmqctl list_channels

Error Quick Reference

SymptomRoot CauseDiagnosisFix
rpm -ivh rabbitmq-server-...rpm reports missing dependenciessocat/openssl and other dependencies not installed or version mismatchrpm -qpR package-name.rpmInstall dependencies first; unify repository source
RabbitMQ version number inconsistentDocumentation version number inconsistency causing misoperationCompare download link with installed filenameUnify version number
Startup fails,提示 Erlang version incompatibleErlang/OTP and RabbitMQ version range mismatcherl -version; startup logsSelect Erlang version according to official compatibility matrix
systemctl start rabbitmq-server failsservice unit/permission/data directory issuesystemctl status + journalctl -u rabbitmq-serverFix based on logs
rabbitmq-plugins enable failsNode not running, plugin directory not writablerabbitmqctl statusEnsure service started normally first
Access 15672 failsPort not listening/firewall not opened/plugin not enabledss -lntp|grep 15672Check firewall and plugin status
Login to management console fails after adding userUser permissions/tags not set or vhost permissions missingrabbitmqctl list_usersExecute set_permissions and set_user_tags together
Permissions set successfully but business still rejectsUsed non-/ vhostManagement console check vhostSet permissions for actual vhost
Docker Compose data lost after startupVolume not mounted or volume name changeddocker volume lsKeep volume configuration
Default account/weak password security riskadmin/secret, root/123456 are guessable credentialsConfiguration and command sectionsProduction change to strong password and limit exposure