Belajar RabbitMQ - Queue Features & Configuration
Episode 10 of 33

Belajar RabbitMQ - Queue Features & Configuration

Tidak semua queue diciptakan sama. Di episode ini kalian membandingkan classic, quorum, stream, dan priority queues, menguasai argumen deklarasi seperti max length, TTL, dan overflow behavior, serta memahami kapan memakai queue durable, exclusive, atau auto-delete.

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

Pendahuluan

Selama ini kita mendeklarasikan queue dengan queue_declare tanpa memikirkan banyak hal — padahal satu parameter saja sudah mengubah seluruh karakter queue. Di RabbitMQ modern, pilihan tipe queue adalah keputusan arsitektur paling penting setelah memilih broker: classic, quorum, atau stream memiliki trade-off keandalan, performa, dan fitur yang berbeda.

Episode ini juga memperkenalkan queue arguments — parameter deklarasi yang mengendalikan perilaku queue secara detail, mulai dari batas panjang antrean, TTL, hingga perilaku saat queue penuh. Argument inilah yang membuat satu queue mampu memproteksi dirinya sendiri dari ledakan pesan.

Terakhir, kita bahas mode deklarasi: durable, exclusive, auto-delete, dan passive. Deklarasi yang salah adalah sumber error paling umum di RabbitMQ — misalnya mendeklarasikan ulang queue dengan argumen berbeda di environment yang sama.

Queue Types

Classic Queues (v1 dan v2)

Classic queue adalah tipe default sejak awal RabbitMQ. Ia paling fleksibel dalam fitur (priority, lazy mode) dan cepat untuk skenario sederhana. Mulai RabbitMQ 3.10, ada dua versi storage: classic v1 yang lama dan classic v2 yang lebih efisien. Untuk single-node sederhana, classic queue tetap pilihan valid.

Kelemahan classic queue: tidak cocok untuk high availability. Jika node mati, queue hilang — kecuali di-mirror dengan pola lama yang sudah tidak disarankan. Untuk HA, pakai quorum.

Quorum Queues

Quorum queue (3.8+) berbasis algoritma konsensus Raft: pesan direplikasi ke beberapa node, dan dijamin tidak hilang selama mayoritas node hidup. Ini tipe queue yang direkomendasikan untuk produksi dan high availability. Detail lengkapnya ada di episode 20.

Stream Queues dan Priority Queues

Stream queue (3.9+) menyimpan pesan sebagai log append-only dan memungkinkan konsumsi ulang dari offset mana pun — detailnya di episode 21. Sementara priority queue mengatur urutan pengiriman pesan berdasarkan nilai priority:

Deklarasi priority queue
rabbitmqadmin declare queue name=tasks arguments='{"x-max-priority":10}'

x-max-priority menentukan rentang priority (0-255). Semakin besar nilainya, semakin tinggi prioritas pesan keluar dari queue.

Queue Properties dan Arguments

Batas Panjang dan Overflow

x-max-length membatasi jumlah pesan, x-max-length-bytes membatasi total ukuran. Saat batas tercapai, perilaku diatur x-overflow:

  • drop-head (default) — pesan paling lama di-buang.
  • reject-publish — publish ditolak dan publisher menerima Basic.Nack.
Queue dengan max length dan overflow
rabbitmqadmin declare queue name=log_buffer \
  arguments='{"x-max-length":10000,"x-overflow":"reject-publish"}'

TTL dan Expiration

  • x-message-ttl — umur maksimum tiap pesan dalam milidetik.
  • x-expires — umur queue itu sendiri jika tidak ada consumer.
Queue dengan TTL pesan dan queue
rabbitmqadmin declare queue name=notif_ephemeral \
  arguments='{"x-message-ttl":30000,"x-expires":300000}'

Pesan di notif_ephemeral kedaluwarsa setelah 30 detik, dan queue dihapus otomatis jika tidak dipakai selama 5 menit.

Deklarasi Queue

Empat mode deklarasi yang wajib dipahami:

  • durable=True — queue bertahan dari restart broker.
  • exclusive=True — queue hanya untuk satu connection; terhapus saat connection ditutup.
  • auto_delete=True — queue terhapus saat consumer terakhir berhenti.
  • Passive declare — hanya memeriksa apakah queue ada, tidak membuatnya.
PythonDeklarasi passive
import pika.exceptions
 
channel = connection.channel()
try:
    channel.queue_declare(queue="cek", passive=True)
    print("queue cek ada")
except pika.exceptions.ChannelClosedByBroker:
    print("queue cek tidak ada")

Pemanggilan queue_declare(passive=True) sangat berguna untuk health check: jika queue tidak ada, channel akan ditutup dengan error 404.

Kapan Memakai Tipe Queue Tertentu

Panduan memilih tipe queue:

  • Single node, data bisa hilang: classic queue.
  • Butuh HA dan akurasi pesan: quorum queue.
  • Butuh replay dan throughput tinggi: stream queue.
  • Butuh urutan berdasarkan prioritas: priority queue (classic).
  • Buffer log sementara: classic dengan x-max-length dan x-overflow.

Warning

Jangan deklarasikan queue dengan argumen berbeda di environment yang sama. Misalnya mendeklarasikan x-message-ttl yang berubah akan membuat deklarasi ditolak. Pindahkan argument ke policy bila perlu diubah dinamis.

Penutup

Di episode 10 ini kalian sudah membandingkan classic, quorum, stream, dan priority queues; menguasai argumen seperti max length, TTL, expiration, dan overflow behavior; serta memahami mode deklarasi durable, exclusive, auto-delete, dan passive.

Inti yang harus dibawa pulang:

  • Classic queue cepat tapi tidak HA; quorum queue untuk produksi yang aman.
  • Stream queue menyimpan log dan bisa di-replay; priority queue mengurutkan pesan.
  • x-max-length dan x-overflow membatasi pertumbuhan queue.
  • x-message-ttl membatasi umur pesan; x-expires membatasi umur queue.
  • Exclusive queue otomatis terhapus saat connection ditutup.
  • Passive declare berguna untuk memeriksa eksistensi queue.
  • Argumen queue tidak boleh berubah di environment yang sama.

Di episode 11 selanjutnya kita akan membangun dead letter exchanges — jalur penyelamat pesan yang gagal diproses, membuangnya ke queue khusus dengan header x-death, menerapkan pola retry dan parking lot, serta memantau alur pesan yang ditolak. Ini mekanisme paling penting untuk membuat sistem pesan yang tangguh!