Belajar RabbitMQ - Virtual Hosts & Multi-Tenancy
Episode 13 of 33

Belajar RabbitMQ - Virtual Hosts & Multi-Tenancy

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Virtual Hosts Concepts

Logis, Bukan Fisik

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.

Vhost Default

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 dan Mengelola Vhost

Perintah Dasar Vhost

Membuat vhost dan mengatur user di dalamnya:

Buat vhost dan beri permission
rabbitmqctl add_vhost staging
rabbitmqctl set_permissions -p staging arman '.*' '.*' '.*'
rabbitmqctl list_vhosts name

Perintah 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

Menghapus vhost otomatis menghapus seluruh resource di dalamnya — queue, exchange, binding, dan permission:

Hapus vhost
rabbitmqctl delete_vhost staging

Perintah delete_vhost bersifat destruktif. Pastikan sudah melakukan backup definitions (episode 31) sebelum menghapus vhost yang berisi data penting.

Multi-Tenancy Patterns

Per-Environment vs Per-Tenant

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.

Connection URI dengan Vhost

Vhost ikut serta dalam connection URI, ditulis setelah slash pertama. Karakter spesial seperti / di-URL-encode menjadi %2f:

Connection URI dengan vhost
amqp://arman:password@localhost:5672/staging
amqp://arman:password@localhost:5672/%2f

URI pertama terhubung ke vhost staging; URI kedua terhubung ke vhost / — yang harus ditulis %2f karena karakter slash milik URI.

Access Control Per Vhost

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.

Best Practices Vhost

Resource Allocation dan Monitoring

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:

Batasi queue dan connection per vhost
rabbitmqctl set_vhost_limits -p tenant_a '{"max-connections":100,"max-queues":1000}'

Monitoring dan Backup per Vhost

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:

Export definitions satu vhost
curl -u arman:pass -H "content-type: application/json" \
  http://localhost:15672/api/definitions/staging > staging.json

Perintah curl di atas men-download seluruh definitions vhost staging ke file JSON untuk keperluan backup.

Penutup

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:

  • Vhost memisahkan resource dan permission secara logis, bukan fisik.
  • Jangan memakai vhost / untuk semuanya — buat vhost sendiri.
  • Pemisahan per-environment mencegah kesalahan kirim antar lingkungan.
  • Per-tenant vhost cocok untuk SaaS dengan isolasi permission.
  • URI vhost ditulis setelah slash; / menjadi %2f.
  • set_vhost_limits membatasi dampak tenant yang rakus.
  • Backup definitions per vhost memudahkan pemulihan parsial.

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!

Belajar RabbitMQ - Virtual Hosts & Multi-Tenancy | Belajar RabbitMQ