Satu instance RabbitMQ bisa melayani banyak tim atau banyak lingkungan sekaligus. Di episode ini kalian membuat dan mengelola virtual hosts, merancang pemisahan per tenant dan per environment, mengatur akses per vhost, serta memahami connection URI yang menyertakan vhost.

Saat satu tim kecil memakai RabbitMQ, satu ruang tanpa batas sudah cukup. Tapi begitu tim bertambah, atau kalian menjalankan development, staging, dan production sekaligus, semuanya akan saling menginjak: queue dengan nama sama dari environment berbeda akan bertabrakan, dan permission user menjadi tidak terkontrol.
Virtual Host (vhost) adalah jawaban RabbitMQ untuk masalah ini. Vhost adalah namespace logis yang memisahkan resource: queue, exchange, binding, dan user permission di satu vhost tidak terlihat dan tidak bisa diakses dari vhost lain. Satu instance RabbitMQ bisa menampung puluhan vhost tanpa saling mengganggu.
Episode ini membahas cara membuat dan mengelola vhost, merancang pola multi-tenancy yang benar, mengatur akses per vhost, serta praktik terbaik untuk naming, resource allocation, monitoring, dan backup. Dengan vhost yang terkelola rapi, satu broker bisa melayani seluruh organisasi dengan aman.
Penting untuk dipahami: vhost adalah pemisahan logis, bukan fisik. Semua vhost tetap berbagi memori, disk, dan CPU yang sama di dalam satu node. Vhost memberi isolasi namespace dan permission, bukan jaminan resource yang terisolasi — untuk itu kalian butuh node terpisah atau cluster sendiri.
RabbitMQ punya vhost bawaan bernama /. User guest hanya punya akses penuh ke vhost ini. Banyak tim pemula memakai vhost / untuk segalanya — ini yang memicu tabrakan nama dan masalah permission. Mulailah membuat vhost sendiri sejak awal.
Membuat vhost dan mengatur user di dalamnya:
rabbitmqctl add_vhost staging
rabbitmqctl set_permissions -p staging arman '.*' '.*' '.*'
rabbitmqctl list_vhosts namePerintah rabbitmqctl add_vhost membuat vhost, dan set_permissions -p staging memberi user arman hak penuh di dalamnya. User yang tidak punya permission tidak akan bisa terhubung ke vhost tersebut.
Menghapus vhost otomatis menghapus seluruh resource di dalamnya — queue, exchange, binding, dan permission:
rabbitmqctl delete_vhost stagingPerintah delete_vhost bersifat destruktif. Pastikan sudah melakukan backup definitions (episode 31) sebelum menghapus vhost yang berisi data penting.
Dua pola pemisahan yang umum dipakai:
Per-environment: vhost terpisah untuk dev, staging, dan prod. Pola ini mencegah kode development mengirim pesan ke queue production. Sangat disarankan bahkan untuk tim kecil.
Per-tenant: untuk SaaS, buat satu vhost per tenant. Setiap tenant punya queue dan exchange sendiri dengan permission terisolasi. Perhatikan biaya: ratusan vhost menambah overhead metadata, jadi batasi jumlah vhost per node dan pantau performanya.
Vhost ikut serta dalam connection URI, ditulis setelah slash pertama. Karakter spesial seperti / di-URL-encode menjadi %2f:
amqp://arman:password@localhost:5672/staging
amqp://arman:password@localhost:5672/%2fURI pertama terhubung ke vhost staging; URI kedua terhubung ke vhost / — yang harus ditulis %2f karena karakter slash milik URI.
Permission bersifat per-vhost: user yang sama bisa punya hak penuh di dev tapi hanya bisa membaca di prod. Detail permission configure, write, dan read dibahas di episode 16. Prinsipnya: jangan pernah memberi satu user akses penuh ke semua vhost tanpa alasan.
Tip
Ikuti konvensi penamaan yang konsisten: vhost-<environment> seperti dev, staging, prod, atau tenant-<nama> untuk SaaS. Gunakan karakter alfanumerik dan strip, tanpa spasi.
Meski vhost tidak mengisolasi resource fisik, kalian bisa membatasi dampaknya: pasang limits per vhost untuk memproteksi broker dari tenant yang rakus. RabbitMQ mendukung rabbitmqctl set_vhost_limits:
rabbitmqctl set_vhost_limits -p tenant_a '{"max-connections":100,"max-queues":1000}'Pantau metrik per vhost di Management UI — setiap vhost punya tab sendiri dengan queue depth dan message rate masing-masing. Untuk backup, export definitions per vhost agar pemulihan hanya menyentuh bagian yang rusak:
curl -u arman:pass -H "content-type: application/json" \
http://localhost:15672/api/definitions/staging > staging.jsonPerintah curl di atas men-download seluruh definitions vhost staging ke file JSON untuk keperluan backup.
Di episode 13 ini kalian sudah memahami vhost sebagai namespace logis, membuat dan mengelola vhost dengan rabbitmqctl, merancang pemisahan per environment dan per tenant, mengatur permission dan limit per vhost, serta mengatur backup definitions per vhost.
Inti yang harus dibawa pulang:
/ untuk semuanya — buat vhost sendiri./ menjadi %2f.set_vhost_limits membatasi dampak tenant yang rakus.Di episode 14 selanjutnya kita akan membahas flow control dan backpressure — cara RabbitMQ melindungi diri dari kelebihan beban dengan TCP backpressure, credit-based flow control, memory alarm, dan connection blocked state, lengkap dengan publisher confirms dan strategi throttling publisher. Ini kunci mencegah broker tumbang di bawah trafik tinggi!