RabbitMQ on Docker and WebUI for Monitoring

RabbitMQ is one of the most widely used open-source message brokers, facilitating communication between distributed systems. It implements the Advanced Message Queuing Protocol (AMQP), making it a popular choice for enterprise messaging. Running RabbitMQ inside Docker containers simplifies deployment, scalability, and maintenance. Additionally, using a WebUI to monitor RabbitMQ provides real-time insights into queues, connections, and message throughput.

This guide will explore setting up RabbitMQ on Docker, configuring persistent storage, enabling the management plugin for WebUI monitoring, and performing basic administration tasks.

Prerequisites

Before getting started, ensure you have the following installed on your system:

  • Docker: Developers can install Docker from here.

To verify if Docker and Docker Compose are installed, run the following:

docker --version
docker-compose --version

Step 1: Running RabbitMQ with Docker

Pull the RabbitMQ Docker Image

To get started, pull the official RabbitMQ Docker image with the management plugin enabled:

docker pull rabbitmq:3-management

This image comes pre-installed with the RabbitMQ Management Plugin, allowing you to monitor and manage RabbitMQ via a web interface.

Running RabbitMQ Container

Now, start a RabbitMQ container with the following command:

docker run -d --name rabbitmq \
    -p 5672:5672 -p 15672:15672 \
    -e RABBITMQ_DEFAULT_USER=admin \
    -e RABBITMQ_DEFAULT_PASS=admin \
    rabbitmq:3-management
  • -d It runs the container in detached mode.
  • --name rabbitmq Assign a custom name to the container.
  • -p 5672:5672 Maps the RabbitMQ messaging port.
  • -p 15672:15672 Maps the RabbitMQ WebUI (Management Plugin).
  • -e RABBITMQ_DEFAULT_USER=admin Sets the default username.
  • -e RABBITMQ_DEFAULT_PASS=admin Sets the default password.

After executing this command, RabbitMQ should be up and running. You can verify the running container by using:

docker ps

Step 2: Access RabbitMQ WebUI

RabbitMQ provides a user-friendly web-based management console for monitoring queues, exchanges, bindings, and messages.

To access the RabbitMQ Management UI, open a web browser and navigate to:

http://localhost:15672

Log in using the credentials set earlier (admin/admin).

Step 3: Running RabbitMQ with Docker-Compose

Instead of running RabbitMQ manually with docker run, we can use docker-compose to define and manage our RabbitMQ container.

Create a docker-compose.yml File

Create a new directory for your RabbitMQ setup:

mkdir rabbitmq-docker
cd rabbitmq-docker

Now, create a docker-compose.yml The file inside this directory:

services:
  rabbitmq:
    image: "rabbitmq:4.0.6-management"
    container_name: "rabbitmq"
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq

volumes:
  rabbitmq_data:
  • services.rabbitmq.image: Uses the RabbitMQ image with the management plugin.
  • container_name: Assign a custom name to the container.
  • ports: Maps the necessary ports.
  • environment: Defines environment variables for default user credentials.
  • volumes: Creates a named volume to persist data.

Start RabbitMQ with Docker Compose

Run the following command to start RabbitMQ:

docker-compose up -d

This will:

  • Pull the RabbitMQ image (if not already pulled).
  • Create and start the container.
  • Persist data using a named volume (rabbitmq_data).

You can check the status of the container with:

docker-compose ps

Step 4: Configuring RabbitMQ

Once RabbitMQ runs, you can create virtual hosts, queues, and users. Here are some useful commands or WebUI:

Listing Virtual Hosts

Listing Virtual Hosts
docker exec -it rabbitmq rabbitmqctl list_vhosts

Creating a Virtual Host

Add Virtual Host
docker exec -it rabbitmq rabbitmqctl add_vhost /my_vhost

Creating a New User

Add new User
docker exec -it rabbitmq rabbitmqctl add_user myuser mypassword

Setting User Permissions

User Permissions
docker exec -it rabbitmq rabbitmqctl set_permissions -p /my_vhost myuser ".*" ".*" ".*"

Enabling RabbitMQ Plugins

docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management

Step 5: Monitoring RabbitMQ with WebUI

With RabbitMQ running, visit:

http://localhost:15672

Use the login credentials (admin/admin) to access the dashboard.

Login page
Home page
Churn statistics
Ports and contexts
Key Features of RabbitMQ WebUI

To stop RabbitMQ running with Docker Compose:

docker-compose down

To remove RabbitMQ and all associated data:

docker-compose down -v

For a standalone Docker container, stop and remove it using:

docker stop rabbitmq
docker rm rabbitmq

To remove the RabbitMQ image:

docker rmi rabbitmq:3-management

RabbitMQ cluster on Docker

1. Create docker-compose.yml

This file defines a RabbitMQ cluster with multiple nodes.

services:
  rabbitmq-node-1:
    image: rabbitmq:4.0.6-management
    container_name: rabbitmq-node-1
    hostname: rabbitmq-node-1
    environment:
      RABBITMQ_ERLANG_COOKIE: "rabbitmq-cluster-cookie"
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    ports:
      - "15672:15672"  # Management UI
      - "5672:5672"    # AMQP
    networks:
      - rabbitmq_cluster

  rabbitmq-node-2:
    image: rabbitmq:4.0.6-management
    container_name: rabbitmq-node-2
    hostname: rabbitmq-node-2
    environment:
      RABBITMQ_ERLANG_COOKIE: "rabbitmq-cluster-cookie"
    depends_on:
      - rabbitmq-node-1
    networks:
      - rabbitmq_cluster

  rabbitmq-node-3:
    image: rabbitmq:4.0.6-management
    container_name: rabbitmq-node-3
    hostname: rabbitmq-node-3
    environment:
      RABBITMQ_ERLANG_COOKIE: "rabbitmq-cluster-cookie"
    depends_on:
      - rabbitmq-node-1
    networks:
      - rabbitmq_cluster

networks:
  rabbitmq_cluster:
    driver: bridge

2. Start the cluster

Run:

docker-compose up -d

3. Join nodes to the cluster

After the containers start, manually join the nodes.

1. Access rabbitmq-node-2

docker exec -it rabbitmq-node-2 bash

2. Join the cluster

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node-1
rabbitmqctl start_app
PS D:\workspaces\rabbitmq> docker exec -it rabbitmq-node-2 bash
root@rabbitmq-node-2:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq-node-2 ...
root@rabbitmq-node-2:/# rabbitmqctl join_cluster rabbit@rabbitmq-node-1
Clustering node rabbit@rabbitmq-node-2 with rabbit@rabbitmq-node-1
root@rabbitmq-node-2:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq-node-2 ...

3. Repeat for rabbitmq-node-3

docker exec -it rabbitmq-node-3 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node-1
rabbitmqctl start_app
PS D:\workspaces\rabbitmq> docker exec -it rabbitmq-node-3 bash
root@rabbitmq-node-3:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq-node-3 ...
root@rabbitmq-node-3:/# rabbitmqctl join_cluster rabbit@rabbitmq-node-1
Clustering node rabbit@rabbitmq-node-3 with rabbit@rabbitmq-node-1
root@rabbitmq-node-3:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq-node-3 ...

4. Verify Cluster

Run:

docker exec -it rabbitmq-node-1 rabbitmqctl cluster_status

You should see:

Cluster status of node rabbit@rabbitmq-node-1 ...
[{nodes,[{disc,[rabbit@rabbitmq-node-1,rabbit@rabbitmq-node-2,rabbit@rabbitmq-node-3]}]}]

5. Access the RabbitMQ UI

Visit http://localhost:15672

  • Username: admin
  • Password: admin

Developers should see all 3 nodes in the cluster.

RabbitMQ Cluster

Conclusion

You have successfully set up RabbitMQ using Docker and Docker Compose with a WebUI for monitoring. This setup allows you to manage RabbitMQ efficiently while leveraging containerization for easy deployment and scalability.

Leave a Comment

Your email address will not be published. Required fields are marked *