Exclusive #
Dalam RabbitMQ, sebagian besar queue dirancang untuk dipakai bersama oleh banyak producer dan consumer.
Namun ada jenis queue yang bersifat lebih privat dan sementara: exclusive queue.
Exclusive queue memiliki perilaku yang sangat spesifik:
- Terikat pada satu connection
- Tidak bisa diakses connection lain
- Biasanya bersifat sementara
Artikel ini membahas exclusive queue secara mendalam dalam konteks desain sistem RabbitMQ.
“Tidak semua antrian dibuat untuk bertahan lama — sebagian hanya ada selama percakapan itu berlangsung.”
Apa Itu Exclusive Queue? #
Exclusive queue adalah queue yang:
- Hanya dapat digunakan oleh connection yang membuatnya
- Akan dihapus otomatis ketika connection tersebut ditutup
Queue ini bersifat “milik pribadi”.
Jika connection lain mencoba mengaksesnya, RabbitMQ akan menolak.
Karakteristik Utama Exclusive Queue #
Terikat pada Satu Connection #
Queue dibuat dengan flag:
exclusive = true
Artinya:
- Hanya connection tersebut yang dapat consume
- Tidak bisa di-share
Otomatis Dihapus Saat Connection Ditutup #
Jika:
- Connection terputus
- Service crash
- Aplikasi berhenti
Maka queue akan otomatis dihapus oleh broker.
Tidak perlu cleanup manual.
Biasanya Non-Durable #
Exclusive queue hampir selalu digunakan sebagai:
- Non-durable
- Temporary queue
Menggabungkan durable + exclusive jarang memiliki use case nyata.
Use Case Umum Exclusive Queue #
RPC Pattern (Request-Reply) #
Dalam pola RPC berbasis RabbitMQ:
- Client mengirim request ke service
- Client membuat queue khusus untuk menerima response
- Queue tersebut bersifat exclusive dan sementara
1. Diagram RPC dengan Exclusive Queue #
Client
|
| request
v
Service Queue
|
v
Service
|
| reply_to = exclusive_queue
v
Exclusive Queue (Client)
Queue response hanya relevan selama request berlangsung.
Temporary Subscriber #
Dalam beberapa kasus:
- Service hanya ingin subscribe sementara
- Misalnya untuk debugging atau monitoring
Exclusive queue dapat digunakan untuk subscription sementara.
Exclusive vs Auto-Delete #
Exclusive dan auto-delete sering disalahartikan.
| Aspek | Exclusive | Auto-Delete |
|---|---|---|
| Terikat ke connection | Ya | Tidak |
| Dihapus saat tidak ada consumer | Tidak selalu | Ya |
| Biasanya sementara | Ya | Bisa iya atau tidak |
Exclusive lebih ketat karena terikat pada connection tertentu.
Risiko dan Konsekuensi #
Connection Drop = Queue Hilang #
Jika connection terputus karena:
- Network glitch
- Restart service
Queue langsung dihapus.
Jika digunakan untuk data penting, ini berbahaya.
Tidak Cocok untuk Shared Workload #
Exclusive queue tidak bisa digunakan untuk:
- Multiple consumer
- Shared task processing
Tidak Cocok untuk Long-Lived Business Queue #
Queue transaksi penting tidak boleh exclusive.
Exclusive Queue dalam Cluster #
Dalam cluster RabbitMQ:
- Exclusive queue tetap hanya berada di node tempat dibuat
- Tidak direplikasi
Karena sifatnya sementara, exclusive queue tidak dirancang untuk high availability.
Best Practice Penggunaan #
Gunakan untuk RPC Response Queue #
Pola paling umum dan aman.
Jangan Gunakan untuk Event Domain Utama #
Event bisnis sebaiknya menggunakan queue durable dan non-exclusive.
Pastikan Client Siap Membuat Ulang Queue #
Jika connection terputus, client harus mampu membuat ulang queue dan binding.
Ringkasan #
| Karakteristik | Exclusive Queue |
|---|---|
| Scope | Satu connection |
| Lifecycle | Mengikuti connection |
| Durability | Biasanya non-durable |
| Cocok untuk | RPC, temporary workload |
| Tidak cocok untuk | Business-critical queue |
Penutup #
Exclusive queue adalah alat khusus untuk kebutuhan sementara dan privat.
Ia sangat berguna dalam pola seperti RPC.
Namun ia bukan solusi untuk workload utama atau transaksi bisnis.
Dalam desain RabbitMQ yang matang, exclusive queue digunakan dengan sadar — bukan karena kebetulan konfigurasi.
Karena queue yang terikat pada satu koneksi seharusnya hanya hidup selama percakapan itu sendiri berlangsung.