Skip to content

Widhian Bramantya

coding is an art form

Menu
  • About Me
Menu
rabbitmq

Understanding RabbitMQ Virtual Hosts (vhosts) and Their Uses

Posted on September 13, 2025September 13, 2025 by admin

Introduction

In RabbitMQ, a virtual host (vhost) is like a “namespace” or “container” inside the broker.
It separates exchanges, queues, and bindings so different applications or environments can share the same RabbitMQ cluster without interfering with each other.

If you know databases:

  • RabbitMQ server = database server.
  • vhost = database.
  • queue/exchange = tables inside the database.

What is a vhost?

  • A vhost is an isolated environment inside RabbitMQ.
  • Each vhost has its own:
    • Queues
    • Exchanges
    • Bindings
    • User permissions
  • Users can only access resources inside the vhosts where they have rights.

By default, RabbitMQ creates one vhost: /.

Why use vhosts?

  1. Isolation
    • Apps in different vhosts cannot see each other’s queues or exchanges.
    • Example: one vhost for payments, another for notifications.
  2. Security
    • You can give different permissions per vhost.
    • Example: user payments_app can only publish/consume in /payments.
  3. Multi-tenancy
    • One RabbitMQ cluster can serve many teams or customers.
    • Each team gets its own vhost.
  4. Environment separation
    • Use different vhosts for dev, staging, and production in the same cluster.

How to Create and Use vhosts

Create vhost

rabbitmqctl add_vhost payments_vhost

Add user and set permission

rabbitmqctl add_user payments_app StrongP@ssw0rd
rabbitmqctl set_permissions -p payments_vhost payments_app ".*" ".*" ".*"
  • -p payments_vhost → apply permissions to that vhost only.
  • .* means full rights (configure, write, read).

Connect to vhost in client (Go example)

conn, err := amqp.Dial("amqp://payments_app:StrongP@ssw0rd@localhost:5672/payments_vhost")
if err != nil {
    log.Fatal(err)
}
defer conn.Close()

Notice at the end: /payments_vhost. That’s how the client chooses the vhost.

Related posts:

Dead Letter Queues in RabbitMQ: How to Handle Failed Messages

Implementing RPC (Remote Procedure Call) with RabbitMQ

Introduction To RabbitMQ

See also  Introduction To RabbitMQ
Pages: 1 2
Category: RabbitMQ

Leave a Reply Cancel reply

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

Linkedin

Widhian Bramantya

Recent Posts

  • Smart Automation in PostgreSQL: Managing Time-Based Data with pg_partman and pg_cron
  • Understanding PostgreSQL WAL, Slot, Publication, LSN, and Replication Lag
  • PostgreSQL Write-Ahead Log (WAL): Durability, Performance Tuning, and Recovery Explained
  • PostgreSQL Replication Deep Dive: From High Availability to Multi-Master Clusters
  • Finding Nearby Merchants in a Ride-Hailing App Using Elasticsearch Polygon Search
  • Advanced Text Search in Elasticsearch: N-Gram, Reverse, Fuzzy, and Search-as-you-type
  • Understanding and Customizing Analyzers in Elasticsearch
  • Log Management at Scale: Integrating Elasticsearch with Beats, Logstash, and Kibana
  • Index Lifecycle Management (ILM) in Elasticsearch: Automatic Data Control Made Simple
  • Blue-Green Deployment in Elasticsearch: Safe Reindexing and Zero-Downtime Upgrades
  • Maintaining Super Large Datasets in Elasticsearch
  • Elasticsearch Best Practices for Beginners
  • Implementing the Outbox Pattern with Debezium
  • Production-Grade Debezium Connector with Kafka (Postgres Outbox Example – E-Commerce Orders)
  • Connecting Debezium with Kafka for Real-Time Streaming
  • Debezium Architecture – How It Works and Core Components
  • What is Debezium? – An Introduction to Change Data Capture
  • Offset Management and Consumer Groups in Kafka
  • Partitions, Replication, and Fault Tolerance in Kafka
  • Delivery Semantics in Kafka: At Most Once, At Least Once, Exactly Once

Recent Comments

No comments to show.

Archives

  • October 2025
  • September 2025
  • August 2025
  • November 2021
  • October 2021
  • August 2021
  • July 2021
  • June 2021
  • March 2021
  • January 2021

Categories

  • Debezium
  • Devops
  • ElasticSearch
  • Golang
  • Kafka
  • Lua
  • NATS
  • PostgreSQL
  • Programming
  • RabbitMQ
  • Redis
  • VPC
© 2026 Widhian Bramantya | Powered by Minimalist Blog WordPress Theme