Autodelete #
Dalam RabbitMQ, tidak semua queue dirancang untuk hidup permanen.
Selain durable dan exclusive queue, ada satu karakteristik penting lainnya: auto-delete.
Auto-delete queue adalah queue yang akan dihapus otomatis ketika tidak lagi digunakan.
Namun “tidak digunakan” di sini memiliki definisi yang spesifik.
Artikel ini membahas auto-delete queue secara mendalam dalam konteks desain RabbitMQ production.
“Beberapa komponen sistem tidak perlu bertahan selamanya — mereka hanya perlu ada selama masih relevan.”
Apa Itu Auto-Delete Queue? #
Auto-delete queue adalah queue yang:
- Akan dihapus secara otomatis oleh broker
- Ketika tidak ada lagi consumer yang terhubung
Queue dibuat dengan flag:
auto_delete = true
Ketika consumer terakhir berhenti, queue akan dihapus.
Perbedaan Auto-Delete dan Exclusive #
Walaupun sering digunakan bersama, keduanya berbeda.
| Aspek | Auto-Delete | Exclusive |
|---|---|---|
| Dihapus saat connection ditutup | Tidak selalu | Ya |
| Dihapus saat tidak ada consumer | Ya | Tidak otomatis |
| Bisa diakses banyak connection | Ya | Tidak |
| Cocok untuk | Temporary subscription | Private response queue |
Auto-delete lebih fleksibel dibanding exclusive.
Cara Kerja Auto-Delete #
1. Diagram Lifecycle Auto-Delete Queue #
Consumer 1 connect
Consumer 2 connect
Queue aktif
Consumer 1 disconnect
Consumer 2 disconnect
→ Broker menghapus queue
Queue hanya bertahan selama masih ada consumer.
Jika semua consumer berhenti, queue otomatis dihapus.
Use Case Auto-Delete Queue #
Temporary Subscriber dalam Pub-Sub #
Dalam pola publish-subscribe:
- Service sementara ingin menerima event
- Setelah selesai, subscription tidak lagi dibutuhkan
Auto-delete memastikan queue tidak tertinggal.
Dynamic Microservice Instance #
Misalnya:
- Service autoscale di Kubernetes
- Instance baru membuat queue khusus
- Saat instance mati, queue dihapus otomatis
Real-Time Streaming Sementara #
Untuk consumer yang hanya ingin menerima event selama sesi aktif.
Kombinasi Auto-Delete dengan Durable #
Secara teknis, queue bisa dibuat:
- Durable + auto-delete
Namun ini jarang digunakan.
Karena durable bertujuan bertahan restart, Sedangkan auto-delete bertujuan menghapus saat tidak digunakan.
Biasanya auto-delete digunakan bersama non-durable queue.
Risiko dan Konsekuensi #
Kehilangan Queue Tanpa Disadari #
Jika semua consumer disconnect (misalnya rolling restart):
- Queue bisa terhapus
- Message di dalamnya ikut hilang
Ini berbahaya jika queue menyimpan data penting.
Tidak Cocok untuk Business-Critical Queue #
Queue transaksi utama tidak boleh auto-delete.
Race Condition Saat Restart Service #
Jika consumer restart terlalu cepat dan semua instance sempat tidak aktif:
- Queue bisa terhapus sebelum instance baru attach
Desain deployment harus mempertimbangkan ini.
Auto-Delete dalam Cluster #
Dalam cluster:
- Auto-delete tetap mengikuti aturan consumer count
- Jika semua consumer pada cluster berhenti, queue dihapus
Tidak ada perlakuan khusus terkait replication.
Best Practice #
Gunakan untuk Temporary Subscription #
Contoh:
- Monitoring
- Debugging
- Session-based consumer
Jangan Gunakan untuk Core Domain Event #
Queue utama domain sebaiknya durable dan non-auto-delete.
Pastikan Consumer Lifecycle Stabil #
Jika menggunakan auto-delete pada sistem autoscale, pastikan tidak semua instance mati bersamaan.
Ringkasan #
| Karakteristik | Auto-Delete Queue |
|---|---|
| Dihapus saat tidak ada consumer | Ya |
| Cocok untuk | Temporary subscription |
| Tidak cocok untuk | Data bisnis penting |
| Risiko | Queue hilang saat semua consumer disconnect |
Penutup #
Auto-delete queue adalah alat untuk lifecycle yang dinamis.
Ia membantu menjaga sistem tetap bersih tanpa meninggalkan queue yatim.
Namun seperti semua fitur otomatis, ia harus digunakan dengan penuh kesadaran.
Dalam desain RabbitMQ yang matang, queue yang mengandung data penting harus stabil dan eksplisit.
Auto-delete hanya cocok ketika queue memang dirancang untuk hidup sementara.
Karena dalam sistem messaging, lifecycle queue sama pentingnya dengan lifecycle pesan di dalamnya.